如何使用变量在函数中指定COPY to目的地



在PostgreSQL 9.3中,我想创建一个函数,将数据从表复制到CSV文件中。此功能有效:

CREATE OR REPLACE FUNCTION backup_tables(character varying)
RETURNS integer AS
$BODY$
declare
fileName text;
begin
copy adhoc_query to 'c:/misc/adhoc_query.csv' csv;
return 1;
end;

然而,我从中得到了一个语法错误:

CREATE OR REPLACE FUNCTION backup_tables(character varying)
RETURNS integer AS
$BODY$
declare
fileName text;
begin
fileName = 'c:/misc/adhoc_query.csv';
copy adhoc_query to fileName csv;
return 1;
end;

pgAdmin将复制命令中的"fileName"标记为错误的位置。我希望能够让调用者指定目标文件,但这看起来是不可能的。有办法吗?

路径不能使用文字以外的任何内容。但是您可以从变量构建命令,然后EXECUTE它。

...
EXECUTE 'COPY (' || adhoc_query || ') TO ''' || fileName || ''' CSV;';
...

将查询保存在.sql文件中,并使用psql:执行

psql -U postgres -d database -A -F"," -f /path/to/sql/file.sql > /path/to/csv/file.csv

来自psql文档:

  • -A:切换到未对齐输出模式。(默认输出模式是对齐的。(这相当于\pset格式未对齐
  • -F:使用分隔符作为未对齐输出的字段分隔符。这相当于\pset fieldsep或\f

最新更新