我正在运行一个 Postgres 数据库,并在 ruby 中使用 COPY
命令将数据加载到一个临时表中。
看起来像这样:
@conn = PG.connect(dbname: 'load_test')
res = @conn.async_exec <<-QUERY
COPY tmp_inventory FROM '#{infile_location}' CSV HEADER DELIMITER '|'
QUERY
有一条 INFO 日志消息,其中包含添加的总行数。我如何从 ruby 中以编程方式获取此数字?
最佳答案
您可以在 Postgres 中执行此操作或直接从 Ruby 中的 Postgres 界面获取它:
使用 ruby
更具体地说是类 PGresult
.
我不是 Ruby 专家,但正在研究文档 here和 here ,似乎方法 cmd_tuples
只适用于 INSERT|DELETE|UPDATE|MOVE|FETCH
。
还有常量 PGRES_COPY_OUT
或 PGRES_COPY_IN
(针对手头的情况)。好像the method result_status
returns the respective value :
Returns the status of the query. The status value is one of:
PGRES_EMPTY_QUERY PGRES_COMMAND_OK PGRES_TUPLES_OK PGRES_COPY_OUT PGRES_COPY_IN PGRES_BAD_RESPONSE PGRES_NONFATAL_ERROR PGRES_FATAL_ERROR PGRES_COPY_BOTH
因此,在您的示例中,您应该通过以下方式获得所需的值:
res.result_status
使用 Postgres
您将使用 PL/pgSQL 函数以编程方式访问 COPY
处理的行数(需要 9.2+ 版本):
关于ruby - 如何找出复制的行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26764785/