我有一系列我正在运行的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可执行文件。
答案 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';
不需要临时表!