Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PostgreSQL Новый топик    Ответить
 вставка данных из произвольного запроса в таблицу  [new]
Misha111
Member

Откуда:
Сообщений: 42
добрый день.
есть задача вставки данных из произвольного запроса в таблицу по совпадению имен полей.
в оракле решалась процедурой которая через
dbms_sql.describe_columns
строила инсерт с пересекающимися именами полей и выполняла.

в пг dbms_sql.describe_columns отсутствует.
решение 1 - create view temporary as select ... и обращение к information_schema.columns для вытаскивания имен полей запроса
(через ж, но зато с типами полей)

решение 2 через жсон:
select key flds 
from json_each_text(
(select row_to_json(a)
from 
(
select 1 fld1, 2 fld2, 'qqq' fld3
)a
limit 1)
)


может есть более простые варианты решения задачи?
28 апр 21, 16:50    [22315765]     Ответить | Цитировать Сообщить модератору
 Re: вставка данных из произвольного запроса в таблицу  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 803
Misha111,

\gdesc в psql не подойдет? Начиная с 11 версии:
postgres=# select 1 fld1, 2 fld2, 'qqq' fld3\gdesc
 Column |  Type   
--------+---------
 fld1   | integer
 fld2   | integer
 fld3   | text
28 апр 21, 17:12    [22315780]     Ответить | Цитировать Сообщить модератору
 Re: вставка данных из произвольного запроса в таблицу  [new]
Misha111
Member

Откуда:
Сообщений: 42
нужно процедурное решение.
я так понимаю в plpgsql или подобное это не запихнуть
28 апр 21, 17:16    [22315783]     Ответить | Цитировать Сообщить модератору
 Re: вставка данных из произвольного запроса в таблицу  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 803
Misha111,

В plpgsql нет, а на питончике думаю запросто можно.
28 апр 21, 19:05    [22315892]     Ответить | Цитировать Сообщить модератору
 Re: вставка данных из произвольного запроса в таблицу  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 803
Павел Лузанов
В plpgsql нет, а на питончике думаю запросто можно.

Хм, на счет "запросто" погорячился. В модуле plpy только у функции execute есть методы colnames, coltypes. Т.е. пока не выполнишь запрос, ничего не получишь.
28 апр 21, 20:12    [22315935]     Ответить | Цитировать Сообщить модератору
 Re: вставка данных из произвольного запроса в таблицу  [new]
Misha111
Member

Откуда:
Сообщений: 42
Павел Лузанов,

спасибо за подсказки.
пока остановлюсь на первых 2х вариантах.
29 апр 21, 15:16    [22316418]     Ответить | Цитировать Сообщить модератору
 Re: вставка данных из произвольного запроса в таблицу  [new]
Павел Лузанов
Member

Откуда:
Сообщений: 803
Misha111,

Я заглянул в переписку, где Павел Стехуле предлагал патч \gdesc. Там он говорит, что использовал еще один прием - временное создание таблицы/представления на основе запроса, получение информации из системного каталога, удаление таблицы/представления. Но всё это элегантным не назовешь.
Собственно это и есть решение 1.

Сообщение было отредактировано: 29 апр 21, 15:21
29 апр 21, 15:29    [22316427]     Ответить | Цитировать Сообщить модератору
Все форумы / PostgreSQL Ответить