약 70 개의 테이블이있는 PostgreSQL 데이터베이스가 있으며 각 테이블에 두 개의 열, created_by
및 updated_by
을 추가하려고합니다. 심지어 우리는이 SQL을 허용하지 않는 H2 메모리 데이터베이스를 사용하는 통합 테스트를 위해,수동으로 테이블을 나열하지 않고 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$$;
그러나 우리가 Liquibase를 사용하고 있기 때문에, 나는 PostgreSQL을에서 잘 작동하는 업데이트 스크립트를 작성했습니다 PostgreSQL 호환 모드.
SELECT * FROM INFORMATION_SCHEMA.TABLES
을하지만,뿐만 아니라 myschema
이 작업을 수행합니다 From this question, 나는 모든 테이블을 선택하는 방법을 알아? 결과를 저장하고 열을 추가하기 위해 루프를 돌리는 방법이 있습니까? 나는 또한 대답에서 언급 한 바와 같이 준비된 문장을 사용하거나 쓰는 방법을 이해하지 못한다.
기본 질문은 : 모든 테이블을 수동으로 나열하지 않고 H2 데이터베이스에 해당하는 업데이트 스크립트를 작성하려면 어떻게합니까?
내가 해달라고 Postgre ..와 puch 경험을 가지고 이것은 MSSQL에 내 솔루션이 될 것입니다 – Morte
사실, H2를 위해 그것을 필요합니다. SQL 문에서 구문 오류가 발생했습니다. "..."예상 됨 또는 FORCE, VIEW, ALIAS, SEQUENCE, USER, TRIGGER, ROLE, SCHEMA, CONSTANT, DOMAIN, TYPE, DATATYPE, AGGREGATE, LINKED, MEMORY, – Cecilya
루프 중에 while 'fetch next'가 누락되었습니다. 지금 편집 중입니다. 그러나 나는 이것이 당신의 문제가 아니라고 생각한다. sry, h2 db 시스템에 대해 많이 모른다. – Morte