我有70桌的PostgreSQL數據庫,我想兩列添加到每個人,created_by
和updated_by
。由於我們使用Liquibase,我寫了一個更新腳本在PostgreSQL的正常工作:列在H2數據庫中所有表添加,而無需手動清單表
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數據庫等效更新腳本,而不必手動列出所有表?
我不有Postgre的Puch經驗..這將是我的解決方案MSSQL – Morte
我需要它的H2,實際上。執行此操作會給我'SQL語句中的語法錯誤:「...」期望「OR,FORCE,VIEW,ALIAS,SEQUENCE,USER,TRIGGER,ROLE,SCHEMA,CONSTANT,DOMAIN,TYPE,DATATYPE,AGGREGATE,LINKED,MEMORY,在while循環。其現在編輯' – Cecilya
我失蹤 '獲取下一個';緩存本地,全局TEMP,臨時表,PRIMARY,UNIQUE,HASH,空間,INDEX「。但我認爲這不是你的問題。sry,對h2db系統不太瞭解 – Morte