【发布时间】:2017-09-27 11:17:43
【问题描述】:
我有一个包含大约 70 个表的 PostgreSQL 数据库,我想为每个表添加两列,created_by 和 updated_by。由于我们使用的是 Liquibase,因此我编写了一个在 PostgreSQL 中运行良好的更新脚本:
DO $$
DECLARE
tables CURSOR FOR
SELECT tablename
FROM pg_tables
WHERE schemaname = 'myschema'
ORDER BY tablename;
BEGIN
FOR table_record IN tables LOOP
EXECUTE
'ALTER TABLE ' || table_record.tablename || ' ADD COLUMN created_by BIGINT; ' ||
'ALTER TABLE ' || table_record.tablename || ' ADD COLUMN updated_by BIGINT;';
END LOOP;
END$$;
但是,对于集成测试,我们使用的是 H2 内存数据库,它不接受此 SQL,即使在 PostgreSQL 兼容模式下也是如此。 From this question,我知道如何选择所有表:
SELECT * FROM INFORMATION_SCHEMA.TABLES
但这对myschema 也有效吗?有没有办法存储结果并循环它们以添加列?如答案中所述,我也不明白如何使用或编写准备好的语句。
基本问题是:如何在不手动列出所有表的情况下为 H2 数据库编写等效的更新脚本?
【问题讨论】: