КП
Size: a a a
КП
D
l
КП
на правах текущего места работы
- ну да ладно, вопросы есть?l
на правах текущего места работы
- ну да ладно, вопросы есть?КП
КП
l
КП
Column | Type | Collation | Nullable | Default | Storage | Stats target | Descriptionи таблица в которую я хотел вставить данные
-------------+---------+-----------+----------+-------------------+----------+--------------+-------------
id | uuid | | not null | gen_random_uuid() | plain | |
name | text | | | | extended | |
Column | Type | Collation | Nullable | Default | Storage | Stats target | DescriptionОбычно вам нужно вставить к примеру пару строк и вы это делаете так в ActiveRecord
--------------+-----------------------------+-----------+----------+----------------------------------+----------+--------------+-------------
id | integer | | not null | generated by default as identity | plain | |
user_id | uuid | | | | plain | |
type | text | | not null | | extended | |
scheduled_at | timestamp without time zone | | not null | | plain | |
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])
если вам нужны инициализированные объекты в ответ или такBook.insert_all([если нужно просто быстро вставить пару
{ id: 1, title: "Rework", author: "David" },
{ id: 1, title: "Eloquent Ruby", author: "Russ" }
])
row
однако в случае когда у вас есть для одного поля целый массив, а для других предполагается одно и тоже значение, вы могли бы сбилдить обычный рубиновый массивids = [1,2,3]и потом просто сделать
ids.map { |id| { user_id: id, type: :some_type, scheduled_at: Time.now} }
insert_all
по примеру вышеINSERT INTO some_tableв некоторых базах данных есть команда unnest
(id, sheduled_at, type)
VALUES
(1, '2015-01-01', 3),
(2, '2015-01-01', 3),
(3, '2015-01-01', 3),
(100500, '2015-01-01', 3);
...
INSERT INTO some_tableи он будет делать все тоже самое что и пример выше.
(id, sheduled_at, type)
SELECT
unnest(array[100, 110, 153, 100500 ...]), '2015-01-01', 3;
DB[:some_table].import(
[
:user_id,
:type,
:sheduled_at
],
DB.select(
Sequel.function(:unnest,
User.where(id: [1,5,10...10001,10002].select { array_agg(:id) }
),
"ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА",
Time.now
)
)
Где array_agg
это функция из Sequel использующая одноименную функцию из базы данных PostgreSQL, она позволяет преобразовать группу значений в массив, в моем случае записать результат запроса id в массив (в массив в представлениях базы данных) , таким образом Sequel сгенерирует SQL в котором будет 3 подзапроса.КП
s
s
SU
Column | Type | Collation | Nullable | Default | Storage | Stats target | Descriptionи таблица в которую я хотел вставить данные
-------------+---------+-----------+----------+-------------------+----------+--------------+-------------
id | uuid | | not null | gen_random_uuid() | plain | |
name | text | | | | extended | |
Column | Type | Collation | Nullable | Default | Storage | Stats target | DescriptionОбычно вам нужно вставить к примеру пару строк и вы это делаете так в ActiveRecord
--------------+-----------------------------+-----------+----------+----------------------------------+----------+--------------+-------------
id | integer | | not null | generated by default as identity | plain | |
user_id | uuid | | | | plain | |
type | text | | not null | | extended | |
scheduled_at | timestamp without time zone | | not null | | plain | |
User.create([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])
если вам нужны инициализированные объекты в ответ или такBook.insert_all([если нужно просто быстро вставить пару
{ id: 1, title: "Rework", author: "David" },
{ id: 1, title: "Eloquent Ruby", author: "Russ" }
])
row
однако в случае когда у вас есть для одного поля целый массив, а для других предполагается одно и тоже значение, вы могли бы сбилдить обычный рубиновый массивids = [1,2,3]и потом просто сделать
ids.map { |id| { user_id: id, type: :some_type, scheduled_at: Time.now} }
insert_all
по примеру вышеINSERT INTO some_tableв некоторых базах данных есть команда unnest
(id, sheduled_at, type)
VALUES
(1, '2015-01-01', 3),
(2, '2015-01-01', 3),
(3, '2015-01-01', 3),
(100500, '2015-01-01', 3);
...
INSERT INTO some_tableи он будет делать все тоже самое что и пример выше.
(id, sheduled_at, type)
SELECT
unnest(array[100, 110, 153, 100500 ...]), '2015-01-01', 3;
DB[:some_table].import(
[
:user_id,
:type,
:sheduled_at
],
DB.select(
Sequel.function(:unnest,
User.where(id: [1,5,10...10001,10002].select { array_agg(:id) }
),
"ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА",
Time.now
)
)
Где array_agg
это функция из Sequel использующая одноименную функцию из базы данных PostgreSQL, она позволяет преобразовать группу значений в массив, в моем случае записать результат запроса id в массив (в массив в представлениях базы данных) , таким образом Sequel сгенерирует SQL в котором будет 3 подзапроса.SU
КП
SU
AS
AS
AS
AS