首页 > 解决方案 > 使用模式中的数组复制到 postgres?

问题描述

我正在使用 Ruby/Rails/Postgres,我的表看起来像(Schema wise):

CREATE TABLE my_table_name(
    my_num double precision NOT NULL,
    my_string_arr character varying[] NOT NULL, # this is an array
    my_int_arr integer[] NOT NULL, # this is an array
)

在 Ruby 中,我试图copy像这样进入这个表:

raw = connection.raw_connection
raw.transaction do
  copy_cmd = <<~SQL
            COPY my_table_name  (
              myNum,my_string_arr,my_int_arr
            )
            FROM STDIN
          SQL

encoder = PG::TextEncoder::CopyRow.new
copy_result = raw.copy_data(copy_cmd, encoder) do
            rows.each do |row|
              raw.put_copy_data(row)
            end
          end

现在,rows看起来像(总共只有 1 行):

[
 [
   1.15,
   ["abcde"],
   [1234]
 ]
]

我得到的错误是:

PG::InvalidTextRepresentation: ERROR:  malformed array literal: "["abcde"]"
DETAIL:  "[" must introduce explicitly-specified array dimensions.
CONTEXT:  COPY my_table_name, line 1, column keywords: "["abcde"]"

我不确定如何解决这个问题,这是我第一次像这样使用 PSQL。关于如何使数组物有所值的任何建议?

标签: ruby-on-railsrubypostgresql

解决方案


推荐阅读