所以我試圖運行這個功能。
CREATE OR REPLACE FUNCTION TableIteration()
RETURNS TABLE(table_schema text, table_name text)
LANGUAGE plpgsql
AS
$$
DECLARE
tgt_schema varchar;
list text[] := ARRAY[
"text1",
"text2",
"text3",
"text4",
"text5",
"text6",
"text7",
"text8",
"text9"
];
BEGIN
FOREACH tgt_schema IN ARRAY list
LOOP
RETURN QUERY EXECUTE
'SELECT t.table_schema :: text, t.table_name::text from information_schema.tables t
WHERE t.table_schema :: text='||tgt_schema;
END LOOP;
END
$$
但不知何故,串聯沒有給我我所期望的。
每次我啟動功能時,我都會收到錯誤:
'錯誤:列“text1”不存在'
為什么 postgres 將我的變數解釋為列?
uj5u.com熱心網友回復:
對宣告的陣列元素使用單引號,并format()為文字使用適當的占位符的函式%L:
...
RETURN QUERY EXECUTE format(
'SELECT
t.table_schema :: text,
t.table_name::text
FROM information_schema.tables t
WHERE t.table_schema :: text = %L', tgt_schema);
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478867.html
