如何使用PG gem捕获PSQL命令的输出?

时间:2013-12-27 08:55:00

标签: ruby-on-rails postgresql pg psql amazon-redshift

我正在尝试将数据从s3复制到redshift。在运行以下内容时:

1.9.2p320 :017 > res = psql_conn.exec("copy table_name from 's3_path' CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx' delimiter '|' timeformat 'YYYY-MM-DD HH:MI:SS' REMOVEQUOTES NULL AS 'NULLL' MAXERROR AS 500 ACCEPTANYDATE TRUNCATECOLUMNS COMPUPDATE OFF;")
INFO:  Load into table 'table_name' completed, 1 record(s) loaded successfully.
INFO:  Load into table 'table_name' completed, 2 record(s) could not be loaded.  Check 'stl_load_errors' system table for details.
=> #<PG::Result:0x007ff90b9c6240> 

我的问题是如何将INFO:行捕获到变量中,或者知道是否发生了某些stl_load_error?

2 个答案:

答案 0 :(得分:1)

如果相应配置,这些将最终出现在日志中...我非常肯定您无法使用变量捕获它们,而不是实际将($stdout或)$stderr暂时替换为某些内容您可以随后关闭并阅读。

答案 1 :(得分:0)

从1.2.3版开始,您可以使用copy_data

conn.copy_data "COPY my_table TO STDOUT CSV" do
  while row=conn.get_copy_data
    p row
  end
end