ruby - 将数组插入 postgresql 映射准备语句

标签 ruby postgresql

我有这段代码:

require 'pg'
a = ["bla","foo","bar","test","wow"]

begin
con = PG.connect :dbname => 'base', :user => 'thatsme'

a.map do |e|
    con.prepare('statement1','INSERT INTO keywords (keyword, created_at, updated_at) VALUES ($1, $2, $3)')
    con.exec_params('statement1', ["#{e}", '2017-01-01 07:29:33.096192', '2017-01-01 07:29:33.096192' ])
end

这会导致错误,即

ERROR:  syntax error at or near "statement1"

我不明白。我错过了一些东西......

最佳答案

exec_params方法不采用准备好的语句名称,这不是受支持的参数。

您可能打算使用 send_query_prepared具有该参数的方法。

这是您的代码的重构版本:

a.each_with_index do |r, i|
  con.prepare("statement_#{i}","INSERT INTO keywords (keyword, created_at, updated_at) VALUES ($1, $2, $3)")
  con.exec_prepared("statement_#{i}", [r, '2017-01-01 07:29:33.096192', '2017-01-01 07:29:33.096192' ])
end

如果您不关心结果,您应该使用 each 而不是 map,因为 map 会创建一个重写的临时数组条目。此外,each_with_index 避免手动操作 i

关于ruby - 将数组插入 postgresql 映射准备语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41414526/

相关文章:

Ruby rest-client 文件上传为具有基本身份验证的多部分表单数据

ruby - 是否有可能(错误地)在 ruby​​ 中使用字符串类来翻译所有字符串 I18n? (理论问题)

sql - 如果值不存在则插入新行并以任何一种方式获取 id

python:如何使用内存数据库测试我的数据库模型?

java - 无法使用 geotools 从 PostGis 查询类型为 double [] 的表

postgresql - Postgresql 中的数组是否存在反向重叠 (&&)?

sql - PL/pgSQL SELECT 到一个数组

ruby-on-rails - 如何对 quickbooks-ruby 进行故障排除

ruby - 此代码示例中的逗号是什么?

ruby-on-rails - ActiveRecord::Relation 如何添加到 Rails 的模型中,为什么每个模型都有单独的 Relation 类?