Ruby on rails Ruby PG gem使用数组作为参数,并带有exec_参数

Ruby on rails Ruby PG gem使用数组作为参数,并带有exec_参数,ruby-on-rails,arrays,ruby,postgresql,pg,Ruby On Rails,Arrays,Ruby,Postgresql,Pg,我想传递一个ruby数组值,如下所示: sql = "SELECT $1" User.connection.raw_connection.exec_params(sql, [[1,2]]) 这是回报 PG::IndeterminateDatatype: ERROR: could not determine data type of parameter $1 如果我将sql更改为“选择$1::int[]”我会得到PG::InvalidTextRepresentation:错误:整数的输入语法

我想传递一个ruby数组值,如下所示:

sql = "SELECT $1"
User.connection.raw_connection.exec_params(sql, [[1,2]])
这是回报

PG::IndeterminateDatatype: ERROR:  could not determine data type of parameter $1
如果我将
sql
更改为
“选择$1::int[]”
我会得到
PG::InvalidTextRepresentation:错误:整数的输入语法无效:“[1,2]”


有没有办法将ruby数组传递到
exec_params
并将其转换为PostgreSQL数组?

您需要按照以下步骤执行:

params = [1, 2]
sql = params.size.times.map { |n| "$#{n+1}::INT" }.join(",")
User.connection.raw_connection.exec_params("SELECT #{sql}", params)

您可以使用编码器执行以下操作:

raw_connection.exec(
  "select $1::int[]",
  [PG::TextEncoder::Array.new.encode([1, 2])]
)
gem允许这样做:

#而不是:
#PG::Connection.exec_参数(
#'选择数组[$1,$2]'
#   [1, 2]
# )
PgExecArrayParams.exec_array_params(conn,'select$1',[[1,2]]
=>[{“数组”=>“{1,2}}]