Postgresql

PostgreSQL:在循環中切換模式名稱

  • March 5, 2021

我正在嘗試動態切換模式名稱以進行一些數據操作。

我正在執行以下內容。

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搜尋目前對我沒有幫助。

當你提出一個WARNINGtry 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 $$;

引用自:https://dba.stackexchange.com/questions/286488