Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Надо в старой базе разобраться, подскажите как увидеть с какими таблицами есть связи определенной таблицы. Или киньте ссылку если такое уже встречалось. Заранее благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 17:03 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
С каким Постгресом Вы работаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 19:40 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
PostgreSQL 7.4.6 Да сори наверно мало инфрмации дал. Я тут покопался и понял что енто можно вытянуть из pg_depend но не уверен что прав там есть objid, refobjid. Мне надо узнать какая таблица с какой связана и по каким полям (ключеввым) Вообщем направте в нужную сторону. Буду весьма благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.11.2005, 20:06 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Я работаю в Постгресе, естественно, нельзя объять необъятное. Решение Ваших проблем, или части, находится в системных таблицах. Основа pg_class; там есть relname, relkind = имя таблицы, relkind=’r’ – таблица БД, то , с переводом на русский у меня трудно. http://www.postgresql.org/docs/7.4/static/catalog-pg-class.html Если в Вашей базе есть constraint , то будет полезна ссылка http://www.postgresql.org/docs/7.4/static/catalog-pg-constraint.html Я не играла со всеми системными таблицами, только с теми, которые мне нужны были для решения моих проф проблем, но я могу помочь с разборкой материала, со столбцами. Вы читаете по-французски? Могу прислать мои примеры игры с системными таблицами Что касатся pg_depend, для моих потребностей это была совершенно ненужная таблица. Я не решаю Ваши задачи, даю наводку, Ваши потребности плохо очерчены в поставленной задаче, о какой зависимости Вы говорите? На фоне данного дока задавайте вопросы, если будут, я постараюсь просматривать эту тему Поделитесь со сроками выполнения Вашего задания, можно делать срочно и плохо, и не очень быстро и намного лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 01:03 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответ, но пока что не понятно как из pg_class вытянуть инфу с какой таблицой связана эта. relkind char r = ordinary table, i = index, S = sequence, v = view, c = composite type, s = special, t = TOAST table - только указывает тип что это table как я понимаю. >Поделитесь со сроками выполнения Вашего задания, можно делать срочно и плохо, и не очень быстро и >намного лучше. Сроков пока нет. Пока все работает, но возможно нужна будет доработка. А пока есть возможность разбираться. >Вы читаете по-французски? К сожалению нет но по английски да, как и все наверное кто читает ету конфу. Ваши потребности плохо очерчены в поставленной задаче, о какой зависимости Вы говорите? Вот пример из доки: Пусть у вас есть таблицы products и orders, но теперь вы хотите позволить таблице orders содержать несколько товаров (что не позволяет делать ранее использованная структура таблицы). Для этого можно использовать следующую структуру этих таблиц: CREATE TABLE products ( product_no integer PRIMARY KEY, name text, price numeric ); CREATE TABLE orders ( order_id integer PRIMARY KEY, shipping_address text, ... ); CREATE TABLE order_items ( product_no integer REFERENCES products, order_id integer REFERENCES orders, quantity integer, PRIMARY KEY (product_no, order_id) ); Вот мне надо увидеть все REFERENCES от одной таблицы к другой. ну про dependence это я конешно зря ляпнул, но если б был гуру по postgres и sql то не спрашивал бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 13:51 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Не пойму - зачем такой изврат? Поставь себе pgadmin и посмотри все связи... Там запросы на создание таблиц показаны - в них видны все связи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 14:46 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
дельный совет согласен. А что с командной строки никак? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 19:52 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Что касается pgadmin, тоже решение, но какова верятность ошибки, на сколько хорошо можно восстановить структуру незнакомой БД, особенно если количество таблиц достаточно большое? Дело практики и опыта, но я считаю, что это не самый элегантный способ. Я уже не говорю, что связи между таблицами не исчерпываются только constraintами. Но, в самом деле, это - личное дело каждого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 21:17 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Я написала сегодня уже один ответ, но только сейчас обнаружила, что он не отправился. Жалко, потому что теперь придется работать с моим примером. И у меня здесь нет под рукой постреса. Мои таблицы: -- Table: public."AchatsDetails" CREATE TABLE "AchatsDetails" ( "N°Achat" int4 NOT NULL, "N°Detail" int4 NOT NULL, "DateDetail" date, "Libelle" text, "Quantite" float8, CONSTRAINT "AchatsDetails_pkey" PRIMARY KEY ("N°Achat", "N°Detail"), CONSTRAINT "AchatsDetails_fk" FOREIGN KEY ("N°Achat") REFERENCES "Achats" ("N°Achat") ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE ) WITH OIDS; -- Table: public."AchatsReceptions" CREATE TABLE public."AchatsReceptions" ( "DateReception" date, "Quantite" float8, "N°thisDetail" int2 NOT NULL, "N°thisAchat" int4 NOT NULL, "N°Reception" int2 NOT NULL, CONSTRAINT "AchatsReceptions_pkey" PRIMARY KEY ("N°thisAchat", "N°thisDetail", "N°Reception"), CONSTRAINT "AchatsReceptions_fk" FOREIGN KEY ("N°thisAchat", "N°thisDetail") REFERENCES "AchatsDetails" ("N°Achat", "N°Detail") ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE INITIALLY IMMEDIATE ) WITH OIDS; Я делаю запрос: tablefk - это таблица, которая содержит FOREIGN KEY, или REFERENCES. В моем примере это - AchatsReceptions. В вашем примере, это таблица order_items. reftable - это таблица, на которую(-ые) ссылаются. У меня - AchatsDetails. У вас - products, orders. conkey - массив номеров столбцов, отмеченных как PRIMARY KEY в таблице tablefk, которые ссылаются на PRIMARY KEY таблиц reftable. У меня эти столбцы в AchatsReceptions отмечены красным. И так "N°thisAchat" - 4, "N°thisDetail" - 3. У вас в order_items столбец product_no - 1, order_id - 2, confkey - массив номеров столбцов, отмеченных как PRIMARY KEY в таблице reftable, которые являются FOREIGN KEY в таблице reftable и на которые ссылаются conkey. во выдала ... У меня эти столбцы в AchatsDetails отмечены синим. И так "N°Achat" - 1, "N°Detail" - 2. У вас - orders.order_id - 1, products.product_no - 1. Теперь WHERE: 1. По имени constraint в таблице tablefk 2. По имени tablefk 3. По имени reftable Три варианта, что удобнее, только переставляете комментарий SELECT tablefkname.relname as tablefk, pg_constraint.conkey, reftablename.relname as reftable, pg_constraint.confkey FROM pg_constraint INNER JOIN pg_class as tablefkname ON tablefkname.oid=pg_constraint.conrelid INNER JOIN pg_class as reftablename ON reftablename.oid=pg_constraint.confrelid WHERE pg_constraint.conname='AchatsReceptions_fk' -- WHERE tablefkname.relname='AchatsReceptions' -- WHERE reftablename.relname='AchatsDetails' ответ для моего примера: tablefk : conkey :reftable : confkey AchatsReceptions :{4,3} :AchatsDetails : {1,2} для вашего пишу, не проверяя в постгресе tablefk :conkey: reftable : confkey order_items : {1} : product_no : {1} order_items : {2} : orders : {1} В массивах conkey и confkey очень важен порядок: conkey4 - confkey1, conkey3 - confkey2. Мой пример более сложный. продолжение следует ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2005, 22:12 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Еще можно из psql командой \d table_name посмотреть информацию о полях таблицы - там все связи с другими таблицами будут вины. Еще вариант поискать программы, которые рисуют структуры базы - там взаимосвязи всегда отображаются (типа ErWin). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 11:26 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
насчет \d table - ничего оно не покажет вот пример из базы (слепил на ходу) \d reception Table "public.reception" Column | Type | Modifiers ---------------+-----------------------------+--------------------------------------------------------------------- invoice_code | bigint | not null default nextval('public.reception_invoice_code_seq'::text) data | timestamp without time zone | cost_pdv_n | money | pdv_there | money | provider_name | text | transport | money | default '$0.00'::money transport_pdv | money | default '$0.00'::money cost_our | money | invoice_num | text | и где связи? а они есть сам делал. А вот за примерчик спасибо бум разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.11.2005, 11:53 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Пустышка получилась, но связи видно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.11.2005, 01:11 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Эгов, Putnikw Вы попробывали то, что я вам предложила в сообщении 17 ноя 05, 22:12? Вам интересно это решение? Я просто не знаю, продолжать или нет? напишите мне, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2005, 00:10 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Программа Aqua Data Studio 4.5 - весит мегабайт 8 триальная версия - рисует схему базы (ER) и позволяет сохранить её в jpg - получается более - менее наглядно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2005, 00:14 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
По вашему примеру SELECT tablefkname.relname as tablefk, pg_constraint.conkey, reftablename.relname as reftable, pg_constraint.confkey FROM pg_constraint INNER JOIN pg_class as tablefkname ON tablefkname.oid=pg_constraint.conrelid INNER JOIN pg_class as reftablename ON reftablename.oid=pg_constraint.confrelid WHERE tablefkname.relname='order_items' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2005, 00:17 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Да спасибо teza. Ваш пример вполне рабочий. А вот с своим прbмером слеплиным на ходу (reception) я явно напутал. Не указал на на какие поля ссылаться. Проверял по \d orders; \d products;\d order_items - действительно показывает связи. Странно что у меня ерунда получалась. P.S. Всегда приятно получить ответ спеца. :-). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.11.2005, 12:08 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Естественно, вы можете использовать все системные таблицы из http://www.postgresql.org/docs/7.4/static/catalogs.html Начинать работать с ними трудно, потом становиться более понятно. Одно очень важное замечание. Это не связано впрямую с вашей задачей, но в свое время мое невнимание на этот факт мне стоил дорого. В системной таблице pg_attribute (stores information about table columns), есть столбец attisdropped (bool), объяснение в доке : This column has been dropped and is no longer valid. A dropped column is still physically present in the table, but is ignored by the parser and so cannot be accessed via SQL. Уничтоженный столбец никуда не исчезает, он становится просто недоступен для несистемный запросов, но у него существует свой порядковый номер. Таким образом, вы можете попасть, что у вас после 2-го столбца идет 4-ый: проверяйте всегда attisdropped = false при работе со столбцами. И еще два запроса для поиска имен первичных и вторичный ключей: --- SQL for PRIMARY KEY of table = pg_class.relname; SELECT pg_constraint.conkey, pg_attribute.attname FROM pg_constraint INNER JOIN pg_attribute ON pg_constraint.conrelid=pg_attribute.attrelid AND pg_attribute.attnum=ANY(pg_constraint.conkey) INNER JOIN pg_class ON pg_constraint.conrelid=pg_class.oid AND pg_constraint.contype='p' AND pg_class.relkind='r' AND pg_class.relname='order_items' --- SQL for FOREIGN KEY of table=pg_class.relname SELECT pg_class.relname, pg_constraint.conname, pg_constraint.confkey, pg_attribute.attname FROM pg_constraint INNER JOIN pg_class ON pg_constraint.conrelid=pg_class.oid AND pg_constraint.contype='f' AND pg_class.relkind='r' AND pg_class.relname='order_items' INNER JOIN pg_attribute ON pg_constraint.confrelid=pg_attribute.attrelid AND pg_attribute.attnum=ANY(pg_constraint.confkey) Ну а теперь запрос для определения пользовательских таблиц БД. pg_namespace.nspname - это имя схемы, где расположена база. У меня эта схема 'public': SELECT * FROM pg_class INNER JOIN pg_namespace ON pg_class.relnamespace=pg_namespace.oid WHERE relkind='r' AND pg_namespace.nspname='public' Чтобы просмотреть все схемы: SELECT oid,* FROM pg_namespace В принципе, это по-моему вся необходимая информация для решения вашей задачи. Было бы хорошо написать функцию, которая для каждой пользовательской таблицы выдавала бы PRIMARY KEY и FOREIGN KEY, да и другие данные, например inherits, если нужно. У меня готовой такой функции нет, но если вас интересует, могу настучать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 13:20 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Большое спасибо teza за ваши ответы! Я и не думал что узнаю так много полезной информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.11.2005, 13:47 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Подниму тему из мезонина.... А никто не подскажет, есть ли возможность отследить зависимости функций от других как функций, так и таблиц базы? Доку курил, но пока безуспешно :-( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2008, 21:17 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
Yuriy Yurchenkoесть ли возможность отследить зависимости функций от других как функций, так и таблиц базы?ответа на этот вопрос не знаю. :-( но странно, что постгрес (версия 8.1) не позволяет создать функцию при отсутствии таблицы (от которой зависит) и при этом позволяет удалить таблицу и получить невалидную функцию. напрашиваются вопросы: наверное вообще эти зависимости не хранятся в системных таблицах? и наверное валидация тела функции проводится лишь на этапе ее создания? Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 10:34 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatно странно, что постгрес (версия 8.1) не позволяет создать функцию при отсутствии таблицы (от которой зависит) и при этом позволяет удалить таблицу и получить невалидную функцию. напрашиваются вопросы: наверное вообще эти зависимости не хранятся в системных таблицах? и наверное валидация тела функции проводится лишь на этапе ее создания?проверять или нет определение функции при создании завист от переменной check_function_bodies по умолчанию она включена и выключается в дампах базы что-бы при их заливке не было проблем с перекрёстными ссылками. ps: по теме ответа тоже не знаю %) а в связи с кол-вом поддерживаемых языков - даже сложно представить как такое вообще можно было бы реализовать... допустим у нас скомпилированная хранимка на C во внешней библиотеке и она внутри себя обращается к хранимке на Java которая вызывает хранимку на perl ну и тд... %) если брать функции например на С то насколько я понимаю максимум что check_function_bodies может проверить для вот например такой функции: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.01.2008, 18:59 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
В рамках задачи версионирования метаданных ПГ использую процедуру удаления хранимок, не имеющих зависимостей (не задействованных в функциональных индексах и т.п). Собственно проверка на наличие зависимостей тривиальная: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:18 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
При создании же хранимок проверяются входные и выходные аргументы, нет ли среди них среди них композитных типов (таблиц или пользовательских композитов). Отсутствие соответствующих типов в БД не позволяет создать процедуру. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:42 |
|
||
|
dependence table
|
|||
|---|---|---|---|
|
#18+
GarrynjaВ рамках задачи версионирования метаданных ПГ использую процедуру удаления хранимок, не имеющих зависимостей (не задействованных в функциональных индексах и т.п). Собственно проверка на наличие зависимостей тривиальная: Код: plaintext имхо в обоих из этих случаях ответ - нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.05.2008, 13:43 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=270&tid=2004373]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 243ms |
| total: | 331ms |

| 0 / 0 |
