在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