Многократная вставка в параметризованный оператор с PG gem - PullRequest
0 голосов
/ 25 сентября 2018

Используя Ruby PG gem , я пытаюсь вставить несколько строк одновременно с exec_params.

Что я хотел бы получить:

INSERT INTO public.my_things (col1, col2)
VALUES
    ('value11', 'value12'),
    ('value21', 'value22'),
    ('value31', 'value32');

Я пробовал это (и другие комбинации):

connection.exec_params(
  'INSERT INTO public.my_things (col1, col2) VALUES ($1, $2)',
  [['value11', 'value12'], ['value21', 'value22'], ['value31', 'value32']],
)

1 Ответ

0 голосов
/ 25 сентября 2018

Следует отметить две вещи:

  1. Вам нужно правильное количество заполнителей.
  2. #exec_params хочет получить плоский массив для параметров.

Итак, вы хотите сказать:

connection.exec_params(
  'INSERT INTO public.my_things (col1, col2) VALUES ($1, $2), ($3, $4), ($5, $6)',
  ['value11', 'value12', 'value21', 'value22', 'value31', 'value32']
)

Или, если у вас есть массив массивов, и вы не знаете, как долго это будет продолжаться до времени выполнения:

aoa = [['value11', 'value12'], ['value21', 'value22'], ['value31', 'value32'], ... ]
values = aoa.length.times.map { |i| "($#{2*i+1}, $#{2*i+2})" }.join(',')
connection.exec_params(
  "INSERT INTO public.my_things (col1, col2) VALUES #{values}",
  aoa.flatten
)
...