Postgresql
PostgreSQL:在循環中切換模式名稱
我正在嘗試動態切換模式名稱以進行一些數據操作。
我正在執行以下內容。
DO $$ DECLARE schema_name TEXT; BEGIN FOR schema_name in select "name" from public.tenants Loop RAISE NOTICE 'The current schema is %', schema_name; INSERT INTO schema_name.campuses (select * from public.campuses where code = schema_name); End Loop; END $$;
但是,我收到以下內容
注意:目前架構是 NTU
錯誤:關係“schema_name.campuses”不存在第 1 行:插入到 schema_name.campuses(從 public.campu 中選擇 *…^ 查詢:插入到 schema_name.campuses(從 public.campuses 中選擇 *,其中 code = schema_name) : PL/pgSQL function inline_code_block line 8 at SQL statement SQL state: 42P01
我嘗試將 schema_name 包裝在 "" 以及
$$ $$. 有沒有解決方案,因為我的Google搜尋目前對我沒有幫助。
當你提出一個
WARNING
try a時INFO
會發生這種情況另外你需要動態 sql 見https://www.postgresql.org/docs/13/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN
DO $$ DECLARE schema_name TEXT; BEGIN SET client_min_messages TO INFO; FOR schema_name in select "name" from test.public.tenants Loop RAISE info 'The current schema is %', schema_name; EXECUTE CONCAT('INSERT INTO ', schema_name , '.campuses (select * from public.campuses where code = $1);') USING schema_name; End Loop; END $$;