我在postgresql中爲所有表都有像table_name_sq這樣的序列。例如, ;postgresql使用for循環更改所有序列
seqtest-> seqtest_sq
seqtest2-> seqtest2_sq
我需要更改數據庫中的所有序列。 (我不能手動爲每個表運行查詢)
我可以得到表並進行序列串
select table_name || '_sq' as sequence_name from information_schema.tables where table_catalog='test' and table_schema='public'
我可以改變順序值指定表
select setval('seqtest_sq',(select max(id) from seqtest)+1)
但我不能合併這些二。 我認爲應該使用for循環,但我無法做到這一點。
代碼是:
DO $$
DECLARE
i RECORD;
BEGIN
FOR i IN (select table_name from information_schema.tables) LOOP
EXECUTE 'SELECT count(*) FROM ' || i;
END LOOP;
END$$;
輸出是:
ERROR: syntax error at or near ")"
LINE 1: SELECT count(*) FROM (seqtest)
^
QUERY: SELECT count(*) FROM (seqtest)
CONTEXT: PL/pgSQL function inline_code_block line 6 at EXECUTE
********** Error **********
ERROR: syntax error at or near ")"
SQL state: 42601
Context: PL/pgSQL function inline_code_block line 6 at EXECUTE
而且我打印的表名與循環,但表名都用括號。
這裏是CODE
DO $$
DECLARE
i RECORD;
BEGIN
FOR i IN (select table_name from information_schema.tables where table_catalog='test' and table_schema='public') LOOP
raise notice 'Value: %',i;
END LOOP;
END$$;
這裏是OUTPUT:
NOTICE: Value: (seqtest)
NOTICE: Value: (seqtest2)
我認爲這是足以讓我擺脫這個括號。
你能幫我建立一個合適的循環或找到一個簡單的方法來實現這一目標嗎?
只要改變'DECLARE我RECORD'到'DECLARE我TEXT' –
'i'是創紀錄的,你需要在記錄中引用該列:'i.table_name' –
非常感謝您的幫助。 我修復了腳本並回答了問題。 –