我有这个功能:
CREATE OR REPLACE FUNCTION create_table(tableName varchar)
RETURNS void AS
$BODY$
BEGIN
EXECUTE format('CREATE TABLE IF NOT EXISTS %L(
link_id integer NOT NULL);',tableName);
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
ALTER FUNCTION create_table(varchar)
OWNER TO postgres;
假设我执行这样的函数:
select * from create_table('me')
我收到此错误:
ERROR: syntax error at or near "'me'"
LINE 1: CREATE TABLE IF NOT EXISTS 'me'(
^
QUERY: CREATE TABLE IF NOT EXISTS 'me'(
link_id integer NOT NULL);
CONTEXT: PL/pgSQL function create_table(character varying) line 4 at EXECUTE statement
********** Error **********
ERROR: syntax error at or near "'me'"
SQL state: 42601
Context: PL/pgSQL function create_table(character varying) line 4 at EXECUTE statement
您能告诉我这个错误是什么意思以及如何解决吗? 感谢
答案 0 :(得分:1)
来自the documentation for format
:
I
将参数值视为SQL标识符,必要时对其进行双引号。L
将参数值引用为SQL文字。
你想要前者,而不是后者。所以:
EXECUTE format('CREATE TABLE IF NOT EXISTS %I(
link_id integer NOT NULL);',tableName);
(免责声明:我没有使用PostgreSQL实例进行测试,因此在您将%L
更正为%I
后仍可能存在其他一些问题。)