【发布时间】:2021-10-03 09:00:19
【问题描述】:
我想在保持序列标识的同时截断整个数据库。我想出了这样的事情:
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;
我收到此错误:
ERROR: syntax error at or near "TRUNCATE"
LINE 9: TRUNCATE TABLE (SELECT table_name FROM tables_to_be_truncated...
我确实有权截断表,当我运行像 TRUNCATE TABLE access_tokens 这样的单个表时,它工作正常。
我也试过这个
TRUNCATE TABLE (SELECT string_agg(table_name, ', ') FROM tables_to_be_truncated) CONTINUE IDENTITY RESTRICT
效果也不好。
从我在其他帖子中看到的情况来看,人们正在使用函数来做这件事。老实说,我不想走这条路,但如果这是唯一的方法......
【问题讨论】:
-
您需要动态 SQL。
TRUNCATE语法仅支持静态表名列表,不支持查询。
标签: postgresql dynamic-sql truncate