Lui*_* E. 1 postgresql truncate dynamic-sql
我想截断整个数据库,同时保持序列同一性。我想出了这样的事情:
WITH tables_to_be_truncated AS (
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public'
AND table_name NOT IN ('admins', 'admin_roles')
)
TRUNCATE TABLE (SELECT table_name FROM tables_to_be_truncated) CONTINUE IDENTITY RESTRICT;
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ERROR: syntax error at or near "TRUNCATE"
LINE 9: TRUNCATE TABLE (SELECT table_name FROM tables_to_be_truncated...
Run Code Online (Sandbox Code Playgroud)
我确实有权截断表,并且当我运行单个表时,TRUNCATE TABLE access_tokens它工作得很好。
我也尝试过这个
ERROR: syntax error at or near "TRUNCATE"
LINE 9: TRUNCATE TABLE (SELECT table_name FROM tables_to_be_truncated...
Run Code Online (Sandbox Code Playgroud)
但效果不太好。
从我在其他帖子中看到的情况来看,人们正在用函数来做这件事。老实说,我不想走这条路,但如果这是唯一的方法......
你不需要为此的函数。一个anonymous code block会做:
DO $$
DECLARE row RECORD;
BEGIN
FOR row IN SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public'
AND table_name NOT IN ('admins', 'admin_roles')
LOOP
EXECUTE format('TRUNCATE TABLE %I CONTINUE IDENTITY RESTRICT;',row.table_name);
END LOOP;
END;
$$;
Run Code Online (Sandbox Code Playgroud)
除此之外,我认为您无法使用纯 SQL 运行动态查询。
演示:db<>fiddle
| 归档时间: |
|
| 查看次数: |
3411 次 |
| 最近记录: |