powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите построить динамический запрос
5 сообщений из 5, страница 1 из 1
Помогите построить динамический запрос
    #39032312
ZiB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZiB
Гость
Добрый день.
У меня есть следующая таблица:
CREATE TABLE "Journal"
(
"table" character varying(50),
"ID_in_table" integer
)
В колонке "table" находятся названия таблиц из этой же БД.
В колонке "ID_in_table" находятся id из этих таблиц.
Например:
INSERT INTO "Journal"("table", "ID_in_table") VALUES ('Journal01', 1);
INSERT INTO "Journal"("table", "ID_in_table") VALUES ('Journal02', 1);

Во всех таблицах, названия которых есть в Journal.table есть колонки:
1. "date" date
2. "form" character varying(7)
Например:
CREATE TABLE "Journal01" (date date,form character varying(7));
CREATE TABLE "Journal02" (date date,form character varying(7));
INSERT INTO "Journal01"(id, date, form) VALUES (1, '2015-08-18', 'Док.№1');
INSERT INTO "Journal02"(id, date, form) VALUES (1, '2015-08-19', 'Док.№2');

Как мне сформировать запрос, что бы он вывел следующую таблицу:
1. Journal.table
2. Journal.ID_in_table
3. Таблица_из_table.date
4. Таблица_из_table.form

Select Journal.table, Journal.ID_in_table, Таблица_из_table.date, Таблица_из_table.form
From Journal
Left join Journal.table as Таблица_из_table on Таблица_из_table.id = Journal.ID_in_table

'Journal01', 1, '2015-08-18', 'Док.№1'
'Journal02', 1, '2015-08-19', 'Док.№2'

Заранее благодарю.
...
Рейтинг: 0 / 0
Помогите построить динамический запрос
    #39032318
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiBДобрый день.
У меня есть следующая таблица:
CREATE TABLE "Journal"
(
"table" character varying(50),
"ID_in_table" integer
)
В колонке "table" находятся названия таблиц из этой же БД.
В колонке "ID_in_table" находятся id из этих таблиц.
Например:
INSERT INTO "Journal"("table", "ID_in_table") VALUES ('Journal01', 1);
INSERT INTO "Journal"("table", "ID_in_table") VALUES ('Journal02', 1);

Во всех таблицах, названия которых есть в Journal.table есть колонки:
1. "date" date
2. "form" character varying(7)
Например:
CREATE TABLE "Journal01" (date date,form character varying(7));
CREATE TABLE "Journal02" (date date,form character varying(7));
INSERT INTO "Journal01"(id, date, form) VALUES (1, '2015-08-18', 'Док.№1');
INSERT INTO "Journal02"(id, date, form) VALUES (1, '2015-08-19', 'Док.№2');

Как мне сформировать запрос, что бы он вывел следующую таблицу:
1. Journal.table
2. Journal.ID_in_table
3. Таблица_из_table.date
4. Таблица_из_table.form

Select Journal.table, Journal.ID_in_table, Таблица_из_table.date, Таблица_из_table.form
From Journal
Left join Journal.table as Таблица_из_table on Таблица_из_table.id = Journal.ID_in_table

'Journal01', 1, '2015-08-18', 'Док.№1'
'Journal02', 1, '2015-08-19', 'Док.№2'

Заранее благодарю.

Краткий ответ достаточный для вашего уровня знаний - никак и даже думать в сторону такого дизайна забудьте.
Подробный ответ - подобные схемы можно делать через наследование таблиц и использование tableoid в условиях join (но это уже высший пилотаж и в общем не рекомендуемое к использованию решение).

--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
Помогите построить динамический запрос
    #39032484
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiBД
Как мне сформировать запрос, что бы он вывел следующую таблицу:
1. Journal.table
2. Journal.ID_in_table
3. Таблица_из_table.date
4. Таблица_из_table.form

Заранее благодарю.

Через запрос - никак.
Нужно писать ХП на plpgsql, который бы "собирал" данные со всех табличек.
Только по производительности это будет "ад".

:-)
...
Рейтинг: 0 / 0
Помогите построить динамический запрос
    #39032864
ZiB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ZiB
Гость
Дело в том, что в приложении уже написан динамический запрос,
но производительность ужасная.
Думал хоть как-то можно ускорить формирование общего журнала различной структуры документов на уровне самой БД.
А если я из всех таблиц JournalХХ сделаю одну вьюху через union all это должно быть быстрее?
Но вот количество таблиц JournalХХ не константа.
...
Рейтинг: 0 / 0
Помогите построить динамический запрос
    #39033294
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZiBДело в том, что в приложении уже написан динамический запрос,
но производительность ужасная.
Думал хоть как-то можно ускорить формирование общего журнала различной структуры документов на уровне самой БД.
А если я из всех таблиц JournalХХ сделаю одну вьюху через union all это должно быть быстрее?
Но вот количество таблиц JournalХХ не константа.
вам максим уже объяснил -- ленивый способ сделать "юнион олл" от неконстанты -- унаследовать в части (date,form ) всё от общего предка.
после чего соединяться "с предком" по [schema.]"table"::regclass = tableoid.
сами tableoid в таком виде запихать в чеки (почему оно там не изначально -- х.з.)
и динамика исчезнет. но появятся другие проблемы
это раз



во вторых -- не понял , что именно вы ускоряете. какие-то конкретные подвыборки [какие конкретно], или получение всего обо всём разом многомиллионной простынёй -- тут как бы разные подходы к оптимизации напрашиваются, ибо задачи в корне разные.
2.1. ну и тут возникнет что-то про индексные поиски для частных задач. и методы индексации под задачу
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите построить динамический запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]