2014-02-19 4 views
0
select * from pg_tables where schemaname ='reports' and tablename like '%enhancedreports03_0%' order by tablename; 

schemaname | tablename | настольный | табличное пространство | hasindexes | кресты | hastriggers ------------ + -------------------------------- + - ------------------- + -------------- + ------------ + - -------- + ------------- отчеты | extendedreports03_0_1970_01_01 | ss_agent_summarizer | rpt_data_tbs | t | f | f докладов | extendedreports03_0_2013_10_08 | ss_agent_summarizer | rpt_data_tbs | t | f | FПроблема в моем динамическом запросе

Проверочные ограничения: "enhancedreports03_0_1970_01_01_check" CHECK (0 :: двойной точности> = date_part ('эпоха' :: текст, '1970-01-01' :: дата) и 0 :: двойной точности < date_part ('epoch' :: text, '1970-01-02' :: date))

Мне нужно отбросить ограничения в обеих таблицах. Так я попробовал динамический запрос для создания набора результатов. .

select 'ALTER TABLE '||schemaname ||'.'||tablename||' DROP CONSTRAINT '||conname||'' from pg_tables a, pg_constraint b 
where schemaname ='reports' and tablename like '%enhancedreports03_0%' and conname like '%enhancedreports03_0_%' order by tablename; 
Столбец?
ALTER TABLE reports.enhancedreports03_0_1970_01_01 DROP CONSTRAINT 
enhancedreports03_0_1970_01_01_check ALTER TABLE 
reports.enhancedreports03_0_1970_01_01 DROP CONSTRAINT 
    enhancedreports03_0_2013_10_08_check ALTER TABLE 
    reports.enhancedreports03_0_1970_01_01 DROP CONSTRAINT 
    enhancedreports03_0_2013_10_08_check ALTER TABLE 
    reports.enhancedreports03_0_1970_01_01 DROP CONSTRAINT 
    enhancedreports03_0_2013_10_08_check ALTER TABLE 
    reports.enhancedreports03_0_2013_10_08 DROP CONSTRAINT 
    enhancedreports03_0_1970_01_01_check ALTER TABLE 
    reports.enhancedreports03_0_2013_10_08 DROP CONSTRAINT 
    enhancedreports03_0_2013_10_08_check ALTER TABLE 
reports.enhancedreports03_0_2013_10_08 DROP CONSTRAINT 
    enhancedreports03_0_2013_10_08_check ALTER TABLE 
    reports.enhancedreports03_0_2013_10_08 DROP CONSTRAINT 
    enhancedreports03_0_2013_10_08_check 
(8 rows) 

Мне нужен набор результатов быть, как это

ALTER TABLE reports.enhancedreports03_0_1970_01_01 DROP CONSTRAINT enhancedreports03_0_1970_01_01_check 
ALTER TABLE reports.enhancedreports03_0_2013_10_08 DROP CONSTRAINT enhancedreports03_0_2013_10_08_check 

Заранее спасибо Абдул

ответ

0

Попробуйте запросить information_schema.table_constraints где вы можете запросить таблицы непосредственно вместо:

select 
    * 
from 
    information_schema.table_constraints 
where 
    table_name like 'enhancedreports03_0_%%' 
order by 
    table_name; 

Проблема с запросом является то, что вы создаете перекрестное соединение из-за отсутствия соединения между pg_tables и pg_constraint.

Самый простой будет использовать:

select 
    'ALTER TABLE '||table_schema ||'.'||table_name|| 
    ' DROP CONSTRAINT '||constraint_name||';' 
from 
    information_schema.table_constraints 
where 
    table_schema ='reports' 
    and table_name like '%enhancedreports03_0%' 
    and constraint_name like '%enhancedreports03_0_%' 
order by 
    table_name; 

Documentation

Если вы хотели бы использовать каталог пг, то вы должны присоединиться к таблицам правильно:

select 
    relname, 
    conname 
from 
    pg_class pcl 
    join pg_constraint pco on (pcl.oid = pco.conrelid) 
where 
    relname like 'enhancedreports03_0_%' 
0

меня проверить свой код в моей системе он работал абсолютно нормально и дать выложите u, поэтому я добавлю один ; в конце, надеюсь, это вам поможет.

select 'ALTER TABLE '||schemaname ||'.'||tablename||' DROP CONSTRAINT '||conname||';' from pg_tables a, pg_constraint b 
where schemaname ='reports' and tablename like '%enhancedreports03_0%' and conname like '%enhancedreports03_0_%' order by tablename; 
Смежные вопросы