Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Table Inheritance / 7 сообщений из 7, страница 1 из 1
10.08.2007, 16:53
    #34720620
CodeMonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
Собственно есть несколько таблиц унаследованных от одной таблицы. Нужно сделать вьюху, которая будет обьединять данные из всех этих таблиц. Дело в том что позже таблицы будут добавляться еще и придется VIEW подкручивать, вопрос в том можно ли написать универсальное представление и если да то прошу выдать ссылку.

ЗЫ: А нет ли такой фичи уже в самой СУБД?
...
Рейтинг: 0 / 0
10.08.2007, 18:34
    #34720910
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
А вы уже пробовали сделать селект из головной таблицы?
...
Рейтинг: 0 / 0
10.08.2007, 18:35
    #34720916
Thamerlan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
А понял, вы делали всё сами. Вот
почитайте
...
Рейтинг: 0 / 0
10.08.2007, 19:35
    #34721043
drunk2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
ThamerlanА понял, вы делали всё сами. Вот
почитайте Похоже вот это
...
Рейтинг: 0 / 0
10.08.2007, 20:32
    #34721138
CodeMonkey
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
Читал я это уже но там ответа нет. Боюсь плохо обьяснил ситуацию:

CREATE TABLE cities (
name text,
population real,
altitude int -- (in ft)
);

CREATE TABLE capitals (
state char(2)
) INHERITS (cities);

тут еще много наследников с разным набором полей.

Нужно сделать View (или без него обойтись если возможно), такое, что в выборке будут присутствовать все возможные поля из всех наследников, тоесть:

select from myview вернет: name, state, population, altitude и другие поля из других наследников, причем без явного описания:

select name, NULL as state from cities union select name, state, from capitals...

возможно вообще такое?
...
Рейтинг: 0 / 0
10.08.2007, 20:53
    #34721168
iz
iz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
Однозначный случай плохо спроектированного приложения. Misdesign одним словом. Хотеть того, что хотите вы -- все равно что хотеть из родительского объекта обратиться к методам классов-наследников в ООП. Могу "посоветовать" только создать скрипт, который будет в кроне проверять состояние вашей базы и создавать требуемый "динамический" view.
...
Рейтинг: 0 / 0
13.08.2007, 10:48
    #34723014
4321
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Table Inheritance
izМогу "посоветовать" только создать скрипт, который будет в кроне проверять состояние вашей базы и создавать требуемый "динамический" view.ну, ежли состояние базы фиксировано - пишется юнион с перечислением всех полей потомков (для тех потомков, в которых того или иного поля нет заполняем поля Null-ами, расширив соответственный подселект юниона.
при этом, кажется, не теряем особо в быстродействии. по крайней мере - пока. т.к. общие индексы на гирлянду наследников ,кажется, только обещают.


а процедурку наваять, имхо несложно. можно примерно так SELECT *, f(tableoid,oid) FROM "maintable";
где f - pgSQL ф-я, возвращающая ROW (record) вида ~~
EXECUTE 'SELECT * FROM ' ||
quote_ident(SELECT c.relname FROM pg_class c WHERE c.oid = v.tableoid) ||
' WHERE oid = ' || oid
где вместо oid может использоваться ваше ключевое (если оно для всех таблиц - унаследовано).
должно получится (не проверял - ожидаемая проблема - поле с типом запись, каждая из которых разной структуры). доп поле с типом "запись" придется потом разбирать клиентом. (для чего ему можно еще и передать (тоже как поле) запись из системных таблиц - о составе этой самой записи).
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Table Inheritance / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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