Получение комментариев от PostgreSQL DB

29
задан a_horse_with_no_name 23 January 2017 в 14:30
поделиться

5 ответов

Все это работает oid,

mat=> SELECT c.oid FROM pg_catalog.pg_class c WHERE c.relname = 'customers';
  oid  
-------
 23208
(1 row)

Теперь, у меня есть oid для той таблицы, таким образом, я могу спросить:

mat=> select pg_catalog.obj_description(23208);
  obj_description  
-------------------
 Customers
(1 row)

Затем я могу попросить описание четвертого столбца:

mat=> select pg_catalog.col_description(23208,4);
             col_description             
-----------------------------------------
 Customer codes, CHS, FACTPOST, POWER...
(1 row)

, Если Вы хотите знать, который запросы делают psql выполненный, когда Вы делаете \dt+ или \d+ customers, просто выполните его с -E.

13
ответ дан mat 28 November 2019 в 01:09
поделиться

Хорошо, таким образом, я разработал его до градуса...

выбор col_description (идентификатор таблицы, номер столбца)...

т.е.: выберите col_description (36698,2);

, Который работал, но является там более легким способом сделать это, возможно, приносящее все комментарии ко всем столбцам и использующий имя таблицы вместо oid???

0
ответ дан 28 November 2019 в 01:09
поделиться

Я задал подобный вопрос о комментариях Postgresql в прошлом месяце. Если Вы роете, через который, Вы столкнетесь с некоторым кодом Perl моего блога, который автоматизирует процесс извлечения комментария.

Для вытаскивания имен столбцов таблицы можно использовать что-то как следующее:

select
     a.attname  as "colname"
    ,a.attrelid as "tableoid"
    ,a.attnum   as "columnoid"
from
    pg_catalog.pg_attribute a
    inner join pg_catalog.pg_class c on a.attrelid = c.oid
where
        c.relname = 'mytable' -- better to use a placeholder
    and a.attnum > 0
    and a.attisdropped is false
    and pg_catalog.pg_table_is_visible(c.oid)
order by a.attnum

можно тогда использовать tableoid, columnoid кортеж для извлечения комментария каждого столбца (см. мой вопрос).

0
ответ дан Community 28 November 2019 в 01:09
поделиться

У меня это работает с использованием базы данных PostBooks 3.2.2:

select cols.column_name,
(select pg_catalog.obj_description(oid) from pg_catalog.pg_class c where c.relname=cols.table_name) as table_comment
,(select pg_catalog.col_description(oid,cols.ordinal_position::int) from pg_catalog.pg_class c where c.relname=cols.table_name) as column_comment
from information_schema.columns cols
where cols.table_catalog='postbooks' and cols.table_name='apapply'

С уважением, Sylnsr

4
ответ дан 28 November 2019 в 01:09
поделиться

Это ответ немного поздно, но он появился в поиске Google, который я сделал, чтобы исследовать эту проблему. Нам нужны были только описания таблиц, но метод для столбцов будет таким же. Описания столбцов также находятся в таблице pg_description, на которую ссылается objoid.

Добавьте это представление:


CREATE OR REPLACE VIEW our_tables AS 
 SELECT c.oid, n.nspname AS schemaname, c.relname AS tablename, d.description,
   pg_get_userbyid(c.relowner) AS tableowner, t.spcname AS "tablespace", 
   c.relhasindex AS hasindexes, c.relhasrules AS hasrules, c.reltriggers > 0 AS hastriggers
   FROM pg_class c
   LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
   LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
   LEFT JOIN pg_description d ON c.oid = d.objoid
  WHERE c.relkind = 'r'::"char";

ALTER TABLE our_tables OWNER TO postgres;
GRANT SELECT, UPDATE, INSERT, DELETE, REFERENCES, TRIGGER ON TABLE our_tables TO postgres;
GRANT SELECT ON TABLE our_tables TO public;

Затем запустите:

SELECT tablename, description FROM our_tables WHERE schemaname = 'public'

Представление - это модифицированная версия представления pg_tables, которая добавляется в столбец описания. Вы также можете обезопасить определение представления, чтобы сделать его одним запросом.

1
ответ дан 28 November 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: