【问题标题】:Copying query results in to Excel file将查询结果复制到 Excel 文件
【发布时间】:2021-09-02 16:51:21
【问题描述】:

我正在尝试将查询结果复制到 Excel 文件中:

COPY
    (select c.first_name || ' ' || c.last_name AS full_name,
COUNT (p.amount) AS "NUMBER OF TRANSACTIONS",
SUM (p.amount) AS "SUM OF TRANSACTIONS",
ROUND (AVG(p.amount),1) AS "AVERAGE TRANSACTION"
FROM CUSTOMER c
INNER JOIN payment p
ON c.customer_id = p.customer_id
GROUP BY full_name
ORDER BY "AVERAGE TRANSACTION")

TO '/Library/PostgreSQL/13/bin/database/Book2.csv'
DELIMITER ',';

但我不断收到回复:

无法打开文件“/Library/PostgreSQL/13/bin/database/Book2.csv” 写作:权限被拒绝 提示:COPY TO 指示 PostgreSQL 服务器进程写入文件。您可能需要客户端设施 比如 psql 的 \copy。 SQL 状态:42501

我已尝试执行 /copy,但随后出现错误:

错误:“/”第 1 行或附近的语法错误:/COPY ^ SQL 状态:42601 字符:1

我不确定该怎么做,任何帮助将不胜感激。

【问题讨论】:

  • /Library/PostgreSQL/13/bin/database/ 是服务器运行所在机器上的目录吗?
  • /copypsql 命令而不是SQL 语句,正如消息中明确指出的那样。也就是说,它不能在 pgAdmin 或psql 以外的任何客户端中工作。
  • @stickybit 我从那个文件夹导入文件没问题,只能复制到。
  • 服务器运行的用户是否对该目录有写权限?
  • 我为 pgadmin 提供了完整的磁盘访问权限,每个人都可以在我试图复制到的 csv 文件上读写。我认为我的代码是正确的?

标签: postgresql psql pgadmin


【解决方案1】:

您可以在各自的表上使用 pgAdmin4 的导入/导出选项,这将允许您以各种格式(例如 CSV/TSV)导出数据。

【讨论】:

    【解决方案2】:

    假设使用psql。在一个名为 csv_out.sql 的文件中:

    \pset format csv
    \o out.csv
    select c.first_name || ' ' || c.last_name AS full_name,
    COUNT (p.amount) AS "NUMBER OF TRANSACTIONS",
    SUM (p.amount) AS "SUM OF TRANSACTIONS",
    ROUND (AVG(p.amount),1) AS "AVERAGE TRANSACTION"
    FROM CUSTOMER c
    INNER JOIN payment p
    ON c.customer_id = p.customer_id
    GROUP BY full_name
    ORDER BY "AVERAGE TRANSACTION";
    \o
    \pset format align
    

    然后在psql:

    \i csv_out.sql
    

    如果您从脚本中的命令行调用psql,您可能会发现--csv 选项很有用:

    psql --csv -c 'SELECT ...'
    

    psql\pset format 下查看更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多