我已经动态创建了表名,我需要检查这个表是否存在,为此我做了:
....
SELECT to_regclass('public.tableprefix_'||variable_name) INTO table_exists;
IF table_exists IS NULL THEN
RETURN 'NOT EXISTS';
ELSE
RETURN 'EXISTS';
END IF;
....
这会导致错误function to_regclass(text) does not exist
然后我尝试显式类型转换:
SELECT to_regclass('public.tableprefix_'||variable_name::regclass) INTO table_exists;
但同样的错误,我哪里错了?怎么做到这一点?
答案 0 :(得分:2)
\ df to_regclass
postgres=# \df to_regclass
List of functions
┌────────────┬─────────────┬──────────────────┬─────────────────────┬────────┐
│ Schema │ Name │ Result data type │ Argument data types │ Type │
├────────────┼─────────────┼──────────────────┼─────────────────────┼────────┤
│ pg_catalog │ to_regclass │ regclass │ cstring │ normal │
└────────────┴─────────────┴──────────────────┴─────────────────────┴────────┘
(1 row)
你必须使用强制转换为cstring
答案 1 :(得分:1)
另一种方式
declare
table_exists boolean;
begin
select EXISTS (
SELECT 1
FROM information_schema.tables
WHERE table_schema = 'public'
AND table_name = 'tableprefix_' || variable_name || ''
) into table_exists;
If table_exists =true then
RETURN ' EXISTS';
else
RETURN 'NOT EXISTS';
end IF;
end