You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在psql中执行含SELECT语句的COPY命令时出现‘column "gmt" does not exist’错误

解决PostgreSQL AT TIME ZONE 时区列不存在的错误

嘿,这个问题我碰到过好多次!你遇到的错误根源很简单:PostgreSQL把你写的GMT当成了一个列名,而不是时区标识符——因为使用AT TIME ZONE语法时,时区名称必须用单引号括起来,不然数据库会误以为你要引用某个叫GMT的列。

修正后的命令

你可以用两种方式快速修复:

  1. 转义单引号(适合外层用单引号的场景):
psql -c '\COPY (SELECT file_name, status, reported, operator_id, load_dt AT TIME ZONE '\''GMT'\'') FROM mytable) TO STDOUT' > myfile
  1. 改用双引号包裹整个psql命令(更简洁,避免转义麻烦):
psql -c "\COPY (SELECT file_name, status, reported, operator_id, load_dt AT TIME ZONE 'GMT' FROM mytable) TO STDOUT" > myfile

为什么这样能解决问题?

  • 当你用单引号包裹psql的-c参数内容时,shell会把内部的单引号视为字符串的结束标记,所以必须转义才能让PostgreSQL识别到'GMT'是一个时区字符串。
  • 改用双引号包裹外层命令后,内部的单引号不需要转义,PostgreSQL就能正确解析AT TIME ZONE 'GMT'的含义,把load_dt转换为GMT时区的时间。

额外小提示

如果你不确定哪些时区名称是有效的,可以在psql里执行这个查询查看所有支持的时区:

SELECT name FROM pg_timezone_names;

比如你也可以用'UTC'或者更具体的时区如'Europe/London'来替代'GMT'。

内容的提问来源于stack exchange,提问作者BT3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 20:37:35