|
|
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
Сперва немного плача: на работе существует и применяется БД на PostgreSQL, которая была создана еще лет 5 назад. Работаю второй месяц, первый из которых меня вводил в курс дела старый программист, который точно также не принимал никакого участия в разработке этой БД и который за 2 года работы так и не смог понять, как устроена эта база. Ладно, плач закончен. Мне необходимо выгрузить из этой БД целый ряд данных, выполнив JOIN'ы и прочее, но не могу понять что с чем JOIN'нить, т.к. структуры БД нет, документация по этой базе никогда в природе не существовала и т.д. Подскажите пожалуйста, можно ли как-нибудь восстановить связи между таблицами в уже существующей БД на PostgreSQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 22:37:17 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
333Mixim333, Если никто не знает, что там лежит, значит оно никому не нужно. выгружайте любые данные тогда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 23:12:03 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
Можно установить какой-нибудь моделер (например MicroOLAP Database Designer, PgModeler) там есть Рефакторинг базы данных... Правда, это не панацея, но хоть что-то.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 23:18:32 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
Misha Tyurin333Mixim333, Если никто не знает, что там лежит, значит оно никому не нужно. выгружайте любые данные тогда. +1 :) 333Mixim333... Мне необходимо выгрузить из этой БД целый ряд данных, выполнив JOIN'ы и прочее, но не могу понять что с чем JOIN'нить, т.к. структуры БД нет, документация по этой базе никогда в природе не существовала и т.д. Подскажите пожалуйста, можно ли как-нибудь восстановить связи между таблицами в уже существующей БД на PostgreSQL? Если серьезно, то ситуации бывают разные, уходят внезапно разработчики оставляя недокументированные "руины" кода за собой. Наиболее простой способ понять что отвечает за что, это повысить уровень логгирования postgresql и манипулируя данными через приложение пользователя понять какие запросы выполняются при этом. Код: plaintext 1. 2. 3. 4. 5. Если же приложения пользователя нет, а данными манипулировали исключительно руками программиста, через разовые запросы, то варианта кроме приглашения знакомого телепата и нет пожалуй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2013, 23:50:14 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
333Mixim333 Сперва немного плача: на работе существует и применяется БД на PostgreSQL, которая была создана еще лет 5 назад. Работаю второй месяц, первый из которых меня вводил в курс дела старый программист, который точно также не принимал никакого участия в разработке этой БД и который за 2 года работы так и не смог понять, как устроена эта база. Ладно, плач закончен. Мне необходимо выгрузить из этой БД целый ряд данных, выполнив JOIN'ы и прочее, но не могу понять что с чем JOIN'нить, т.к. структуры БД нет, документация по этой базе никогда в природе не существовала и т.д. Подскажите пожалуйста, можно ли как-нибудь восстановить связи между таблицами в уже существующей БД на PostgreSQL? посмотреть глазами на структуру таблиц/названия полей и т.д.... обычно 70% становится ясно после этого сразу... если расставлены FK (вдруг... чудеса тоже бывают) - задача еще проще становится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 01:33:36 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
333Mixim333, Сделать реинжиниринг БД, используя какое либо CASE средство, например, PowerDesigner и Вы получите ER диаграмму БД. Или, запустите Pgadmin и, как Вам уже здесь рекомендовали, смотрите таблицы и вторичные ключи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 08:14:42 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk<> если расставлены FK (вдруг... чудеса тоже бывают) - задача еще проще становится ну, это, почитай, документированная база тогда что там старый "прог" делает, "который за 2 года работы так и не смог понять" -- вообще непонятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 08:16:11 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
Maxim Boguk333Mixim333 Сперва немного плача: на работе существует и применяется БД на PostgreSQL, которая была создана еще лет 5 назад. Работаю второй месяц, первый из которых меня вводил в курс дела старый программист, который точно также не принимал никакого участия в разработке этой БД и который за 2 года работы так и не смог понять, как устроена эта база. Ладно, плач закончен. Мне необходимо выгрузить из этой БД целый ряд данных, выполнив JOIN'ы и прочее, но не могу понять что с чем JOIN'нить, т.к. структуры БД нет, документация по этой базе никогда в природе не существовала и т.д. Подскажите пожалуйста, можно ли как-нибудь восстановить связи между таблицами в уже существующей БД на PostgreSQL? посмотреть глазами на структуру таблиц/названия полей и т.д.... обычно 70% становится ясно после этого сразу... если расставлены FK (вдруг... чудеса тоже бывают) - задача еще проще становится Если БД старая, подвергалась неоднократному рефакторнигу, то порой и очевидные названия таблиц/полей смогут не только помочь, но и более того, ввести в заблуждение (это же относится и к реверс инженерингу через автоматические средства), поэтому к этой информации нужно относится через призму критического мышления. Помимо расширенного логирования я бы посоветовал еще собрать статистику по БД: http://www.postgresql.org/docs/9.3/static/monitoring-stats.html по-крайней мере будет понятно, что используется наиболее часто и с чего нужно начинать раскручивать клубочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2013, 09:27:02 |
|
||
|
Как установить, каким образом связаны таблицы
|
|||
|---|---|---|---|
|
#18+
знакомая петрушка, вот только бд и ПО не самописное, а сделанное за дорого для государства и можно сказать отданное как есть. Описания схемы и зависимостей нет, а разобраться и начать выдергивать данные надо было. С одной стороны были и FK, но связи не везде. Хорошо, что было более или менее четкое формирование названия столбцов и большая часть id были уникальны. Решил задачу написанием запроса работающим по следующему алгоритму: 1. Берал все таблицы нужной схемы где есть поле id 2. Так как имена таблиц могли быть составными (т.е префикс_имя или имя_постфикс), для того чтобы получить реальное имя таблицы исключал возможные комбинации. 3. Делал выборку по всем столбцам всех таблиц нужной схемы, где есть столбец с именем совпадающим с полученным ранее именем таблицы или его возможные комбинации (например имя_id, id_имя или полное название таблицы, до п2) 4. После чего делал проверку найденных совпадений. Брал любой id из таблицы 1 и смотрел его вхождение в таблице 2, если оно было, то делал пометку, что данный столбец таблицы 2 подтвержден, если же вхождение не обнаруживалось, то считал этот столбец не подтвержденным, но в итоговую таблицу все равно включал. После чего вторым скриптом, на основе результата первого строил html страницу с полной структурой всех таблиц нужной схемы с ссылками столбца зависимого, на родительскую таблицу, а у родительской таблицы, ниже, добавлял список всех таблиц где были найдены подтвержденные и неподтвержденные зависимости. Таким способом построил схему бд и без fk, погрешность (не найденные зависимые столбцы) оказалась очень низкой. Пользоваться схемой бд сохраненной в html очень удобно, так как сразу можно перейти от зависимого столбца к родительской таблице и обратно, ну или дальше где так же используется. Правда сейчас этой схемой почти не пользуюсь, так как уже и так помню связи, но когда ухожу в отпуск, то обязательно передаю её тому кто остается за меня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2013, 02:55:13 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38512763&tid=1998922]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
197ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 193ms |
| total: | 459ms |

| 0 / 0 |
