【问题标题】:Ruby PG Gem Using TextEncoder::Array for SELECT WHERE fieldname IN exec_paramsRuby PG Gem 使用 TextEncoder::Array 进行 SELECT WHERE fieldname IN exec_params
【发布时间】:2019-06-27 00:20:29
【问题描述】:

我需要从数组中搜索 id 字段。我正在使用PG gem,所以我想我应该使用TextEncoder::Array.new.encode(myarray) 来推入合格列表。 PostgreSQL结构如下:

SELECT id FROM tablename WHERE fieldname IN ('alpha', 'bravo', 'charlie')

所以我在Ruby 中的起始数组将是['alpha', 'charlie', 'bravo'],所以这是我当前的语法:

a = ['alpha', 'bravo', 'ccharlie']
b = $conn.exec_params( %Q{ SELECT id FROM tablename WHERE fieldname IN ( $1 ) }, [ PG::TextEncoder::Array.new.encode(a) ] )
puts b.inspect

exec_params 显然需要一个数组,即使它是单个数组元素。但是使用PG::TextEncoder::Array.new.encode(a) 会产生以下结构:

"{alpha,bravo,charlie}"

...这是一个对象(.class)。我得到的不正确结果是没有找到记录,这是错误的。

如何将Ruby 数组作为第一个PG 参数放入其中?

更新

我一直在使用:

...AND NOT (mytable.field = ANY ($6))

$6 在哪里:

PG::TextEncoder::Array.new(elements_type: PG::TextEncoder::String.new)

PG::TypeMapByColumn.new 实例中。进入其中的Ruby 数组是有效的,并保存了一个值。在本例中,它是数组中的一个元素字符串,用于我的 SQL 语句。一切都很好,但它不起作用。如果我真的看到发送到db 的 SQL 语句会有所帮助。这里隐藏的太多了。

【问题讨论】:

    标签: arrays ruby postgresql pg


    【解决方案1】:

    我找到了答案:...AND NOT hashtag = ANY ($1)... 其中 $1 是正确的 Ruby arrayPG gem 人实际上并不支持它。

    【讨论】:

    • 感谢您回答您自己的问题。使用ANY ($1) 和PG 数组类型PG::TextEncoder::Array.new(elements_type: PG::TextEncoder::String.new) 绝对是这里最好的答案。
    猜你喜欢
    • 2017-01-03
    • 2015-08-05
    • 2015-10-23
    • 1970-01-01
    • 2011-06-02
    • 2018-03-08
    • 2014-07-13
    • 2020-12-11
    • 2023-03-20
    相关资源
    最近更新 更多