类型 sql_identifier 不存在
type sql_identifier does not exis
所以我正在尝试运行这个函数
CREATE OR REPLACE FUNCTION TableIteration()
RETURNS TABLE(table_schema text, table_name text)
LANGUAGE plpgsql
AS
$$
DECLARE
tgt_schema varchar;
list varchar[] := ARRAY[
'sometext1',
'sometext2',
'sometext3',
'sometext4',
'sometext5',
'sometext6',
'sometext7',
'sometext8',
'sometext9'
];
BEGIN
FOREACH tgt_schema IN ARRAY list
LOOP
RETURN QUERY EXECUTE
'SELECT t.table_schema, t.table_name from information_schema.tables t';
END LOOP;
END
$$
我得到
ERROR: structure of query does not match function result type
Detail: Returned type information_schema.sql_identifier does not match
expected type text in column 1.
但是如果我将类型更改为 sql_identifier,我将无法创建函数,因为它说没有这样的类型。所以问题是我该怎么办?
信息模式列的数据类型很奇怪(我认为这是 SQL 标准强制要求的)。只需将它们转换为文本:
'SELECT t.table_schema::text, t.table_name::text from information_schema.tables t';
所以我正在尝试运行这个函数
CREATE OR REPLACE FUNCTION TableIteration()
RETURNS TABLE(table_schema text, table_name text)
LANGUAGE plpgsql
AS
$$
DECLARE
tgt_schema varchar;
list varchar[] := ARRAY[
'sometext1',
'sometext2',
'sometext3',
'sometext4',
'sometext5',
'sometext6',
'sometext7',
'sometext8',
'sometext9'
];
BEGIN
FOREACH tgt_schema IN ARRAY list
LOOP
RETURN QUERY EXECUTE
'SELECT t.table_schema, t.table_name from information_schema.tables t';
END LOOP;
END
$$
我得到
ERROR: structure of query does not match function result type
Detail: Returned type information_schema.sql_identifier does not match expected type text in column 1.
但是如果我将类型更改为 sql_identifier,我将无法创建函数,因为它说没有这样的类型。所以问题是我该怎么办?
信息模式列的数据类型很奇怪(我认为这是 SQL 标准强制要求的)。只需将它们转换为文本:
'SELECT t.table_schema::text, t.table_name::text from information_schema.tables t';