问题描述
我有一个要求,我需要通过过程通过复制命令将表A中的记录复制到CSV文件中。 直接使用此命令将返回成功:
copY (SELECT * FROM <Table_Name>)
TO '<CSV file location>'
DELIMITER ',' CSV HEADER;
但是当我使用以下命令时,它会给出语法错误:
Syntax error at or near "SELECT"
BEGIN
copY (SELECT * FROM <Table_Name>) TO '<CSV File location>' DELIMITER ',' CSV HEADER;
END;
还下面的步骤无济于事。
create or replace procedure copy_table as
declare
sql varchar;
begin
sql = 'copY (SELECT * FROM personsaddrs limit 10) TO ''/tmp/Shivangi_File2.csv'' DELIMITER ',' CSV HEADER';
perform sql;
end;
BEGIN
copy_table;
END;
这还会返回错误
解决方法
您正在混合使用PL / pgSQL的BEGIN
和SQL的BEGIN
(它们是START TRANSACTION
的缩写,并开始事务),{/ {1}}是一个块。
您在BEGIN
之后忘记了分号。但是,只包含一个语句的事务不需要是明确的。只需忽略它即可。
在您的PL / pgSQL代码中,您忘记了双引号
DELIMITER ','
,
您创建了PROCEDURE
,需要将其与CALL
一起使用; CALL copy_table;
。如果它在FUNCTION
位置,那么您可以这样做:SELECT copy_table;
。