我进入psql命令行模式并输入了正确的数据库,我可以列出所有表格。
现在,我尝试了以下命令:
copy some_table_name1 to '/var/lib/pgsql/csv_exports/some_table_name1.csv' csv header
copy some_table_name2 to '/var/lib/pgsql/csv_exports/some_table_name2.csv' csv header
等等......
命令后没有错误消息或任何内容,我使用tab-button来确保我总是引用正确的表名。
对所有表执行此操作后,我转到目录,根本没有文件。
我做错了吗?
编辑:我应该澄清一下,我在服务器上使用putty和WINSCP来查找该目录。我在运行psql命令的地方也一样。
答案 0 :(得分:0)
文件将写入服务器计算机上的目录,而不是客户端。
使用COPY ... TO STDOUT
将数据发送到客户端。
答案 1 :(得分:0)
在控制台中使用psql,您可以使用以下命令在客户端计算机中获取数据:
$ psql yourdb -c "COPY yourtable TO STDOUT DELIMITER ',' CSV HEADER" > output.csv
如果您想知道如何进行相反的操作(导入),请查看此question。
答案 2 :(得分:0)
假设您真正想做的是将文件输出到本地计算机上的某个位置(即您的开发人员工作站),我建议您使用“\copy”命令,而不是“COPY”命令。
psql -c "\copy (SELECT * FROM account) to '/tmp/account.csv' with csv;"
或
psql -c "\copy account TO '/tmp/account.csv' DELIMITER ',' CSV HEADER;
否则,除非您按照@LaurenzAlbe 的建议将命令明确重定向到 stdout,否则“COPY “命令将检查您是否有权将文件写出到实际的数据库服务器。通常,这不是您所拥有的行为,并且它需要的访问权限和权限比大多数开发人员都多。