如何在 postgres 函数中绑定变量
How do I bind a variable in postgres functions
这是我的代码:
CREATE OR REPLACE FUNCTION public.view_columns_f(viewname text)
RETURNS TABLE(columnn_name text, data_type text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
$$SELECT attname, format_type(atttypid, atttypmod) AS data_type
FROM pg_attribute
WHERE attrelid = ''::regclass$$ using viewname ;
END;
错误是关系“$1”不存在,因为我没有正确绑定它。
Adrian 指出了几个问题,我又修复了几个:
CREATE OR REPLACE FUNCTION public.view_columns_f(viewname regclass)
RETURNS TABLE (columnn_name name, data_type text)
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY
SELECT attname, format_type(atttypid, atttypmod) -- AS data_type
FROM pg_attribute
WHERE attrelid =
AND NOT attisdropped -- exclude deleted columns
AND attnum > 0 -- exclude internal system columns
ORDER BY attnum; -- original order
END
$func$;
通话:
SELECT * FROM public.view_columns_f('my_view');
最重要的是,幸运的是,您根本不需要动态 SQL。在玩更棘手的动态 SQL.
之前,先掌握普通 PL/pgSQL
可能是一个更简单的 SQL 函数,不需要 PL/pgSQL.
函数名称具有误导性。您可以通过这种方式获得任何已注册关系的列,而不仅仅是视图。
延伸阅读:
- Table name as a PostgreSQL function parameter
这是我的代码:
CREATE OR REPLACE FUNCTION public.view_columns_f(viewname text)
RETURNS TABLE(columnn_name text, data_type text)
LANGUAGE plpgsql
AS $function$
BEGIN
return query execute
$$SELECT attname, format_type(atttypid, atttypmod) AS data_type
FROM pg_attribute
WHERE attrelid = ''::regclass$$ using viewname ;
END;
错误是关系“$1”不存在,因为我没有正确绑定它。
Adrian 指出了几个问题,我又修复了几个:
CREATE OR REPLACE FUNCTION public.view_columns_f(viewname regclass)
RETURNS TABLE (columnn_name name, data_type text)
LANGUAGE plpgsql AS
$func$
BEGIN
RETURN QUERY
SELECT attname, format_type(atttypid, atttypmod) -- AS data_type
FROM pg_attribute
WHERE attrelid =
AND NOT attisdropped -- exclude deleted columns
AND attnum > 0 -- exclude internal system columns
ORDER BY attnum; -- original order
END
$func$;
通话:
SELECT * FROM public.view_columns_f('my_view');
最重要的是,幸运的是,您根本不需要动态 SQL。在玩更棘手的动态 SQL.
之前,先掌握普通 PL/pgSQL可能是一个更简单的 SQL 函数,不需要 PL/pgSQL.
函数名称具有误导性。您可以通过这种方式获得任何已注册关系的列,而不仅仅是视图。
延伸阅读:
- Table name as a PostgreSQL function parameter