动态 SQL 在转义字符上失败
Dynamic SQL fails on escape char
我正在尝试编写一个将 csv 加载到 table 中的过程。我创建一个动态 sql 并执行它。
v_sql = '\copy test_table from' || ' ''' || p_temp_dir || ''' ' || ' with csv header;';
--insert into test
--select v_sql;
EXECUTE v_sql;
当我检查生成的字符串时,它没问题,我可以 运行 它正确,但是如果我 运行 它来自一个过程,我得到一个错误:
syntax error at or near "\"
如果我删除 \
字符,它就可以工作(抛出一个错误,指出没有这样的文件;此作业旨在在本地计算机上工作)。我怎样才能执行这个 SQL?
\copy
是 psql
命令,而不是 SQL 语句。
您只能使用 PL/pgSQL 的 EXECUTE
语句执行 SQL 语句。
您不能在服务器上运行的 PostgreSQL 函数中从客户端计算机导入文件。您将必须编写执行 COPY ... FROM STDIN
.
的客户端代码
我正在尝试编写一个将 csv 加载到 table 中的过程。我创建一个动态 sql 并执行它。
v_sql = '\copy test_table from' || ' ''' || p_temp_dir || ''' ' || ' with csv header;';
--insert into test
--select v_sql;
EXECUTE v_sql;
当我检查生成的字符串时,它没问题,我可以 运行 它正确,但是如果我 运行 它来自一个过程,我得到一个错误:
syntax error at or near "\"
如果我删除 \
字符,它就可以工作(抛出一个错误,指出没有这样的文件;此作业旨在在本地计算机上工作)。我怎样才能执行这个 SQL?
\copy
是 psql
命令,而不是 SQL 语句。
您只能使用 PL/pgSQL 的 EXECUTE
语句执行 SQL 语句。
您不能在服务器上运行的 PostgreSQL 函数中从客户端计算机导入文件。您将必须编写执行 COPY ... FROM STDIN
.