首页 > 解决方案 > 从bash将时间戳传递给psql

问题描述

我正在尝试在 ruby​​/rails 中编写数据复制脚本,当我尝试按时间戳过滤时遇到了问题。

这是我的查询:

system(%Q{psql postgres://user:password@postgres --command '\copy (SELECT "id", "name" FROM some_table WHERE created_at > '2019-01-22 13:40') TO STDOUT WITH CSV'})

我遇到了终止字符串和时间戳的问题。

我认为查询是错误\copy: parse error at end of line的,因为时间戳和整个查询都使用单引号。

如果我尝试将时间戳用双引号括起来,它会认为它是一个列名并抛出错误。

如果我尝试将整个查询用双引号括起来并在其中使用单引号,那么我只会一遍又一遍地获取列的名称,而不是实际值。

我只是无法弄清楚正确的组合是什么。

标签: ruby-on-railsbashpostgresql

解决方案


在 \copy 命令周围使用双引号,并且在列名周围不使用任何内容:

system(%Q{psql postgres://user:password@postgres --command "\copy (SELECT id, name FROM some_table WHERE created_at > '2019-01-22 13:40') TO STDOUT WITH CSV"})

推荐阅读