如何在同一文件中使用带有psql副本的sql命令

时间:2013-09-09 21:12:57

标签: sql postgresql

我有一系列我正在运行的sql命令,其中一个是sql结果的副本到一个文件。然后我想放弃桌子。这是一个例子:

psql - d dw -U postgres -f input.sql

input.sql ---------

的内容
CREATE TABLE a_temp AS
SELECT a.*
    FROM a

COPY dw.a_temp to '/opt/data/a/a.csv (delimiter E'\x01');

DROP table a_temp;

这一切都可以在一个文件中完成吗?现在,脚本在CREATE TABLE之后停止,并且永远不会运行副本。我们试图避免多次调用PSQL可执行文件。

2 个答案:

答案 0 :(得分:1)

在CREATE TABLE之后缺少分号并且在路径之后缺少撇号。

CREATE TABLE a_temp AS
SELECT * FROM a;

COPY dw.a_temp TO '/opt/data/a/a.csv' DELIMITER E'\x01';

DROP table a_temp;

根据上下文,架构也可能存在问题。如果你将SEARCH_PATH设置为'dw',它应该可以工作,否则你可能在公共场合创建表a_temp,并尝试从dw复制。

答案 1 :(得分:0)

你的postgresql版本是什么?在以后的版本中,您可以直接从SELECT查询中复制。 - Igor Romanchenko

这是我最终采用的解决方案。所以声明看起来像是

COPY (SELECT * FROM a)
TO '/opt/data/a/a.csv' 
WITH DELIMITER E'\x01';

不需要临时表!