0

我有一系列正在运行的 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 可执行文件。

4

2 回答 2

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 复制。

于 2013-09-09T21:19:03.313 回答
0

你的postgresql是什么版本的?在以后的版本中,您可以直接从 SELECT 查询中复制。——伊戈尔·罗曼琴科

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

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

不需要临时表!

于 2013-09-10T15:07:55.610 回答