在PGAdmin工具中的过程中编写复制命令的正确语法

问题描述

我有一个要求,我需要通过过程通过复制命令将表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;