Як побачити код CREATE VIEW для перегляду в PostgreSQL?


173

Чи є простий спосіб побачити код, який використовується для створення представлення даних за допомогою клієнтського командного рядка PostgreSQL?

Щось схоже на SHOW CREATE VIEWMySQL.

Відповіді:


229

Потрібно повернутися сюди, щоб подивитися вгору pg_get_viewdef(як запам'ятати це !!), тому шукав більш пам'ятну команду ... і отримав її:

\d+ viewname

Ви можете побачити подібні види команд, ввівши \?командний рядок pgsql.

Порада про бонус: Команда emacs sql-postgresробить pgsql набагато приємнішим (редагувати, копіювати, вставляти, історію команд).


1
Я зазвичай комбіную цей фокус із командою \ o. Я скидаю \ d + до деяких файлів, потім за допомогою макроса Vim я модифікував ці файли відповідно до моєї потреби.
Мозок90

Сумно в тому, що це неможливо використовувати без psql. "Чиста" версія SQL-команд (без використання pg_get_viewdef взагалі) може, яка є більш портативною, наприклад, до Perl з DBI.
Jinxed

1
Що корисніше - це можливість редагування коду визначення перегляду безпосередньо з деякою варіацією команди \ e, наприклад \ ef для функцій. Функція \ ev була б непогана. Поки що рішення, запропоноване @ Brain90, є найближчим до мене, для швидкого редагування визначень перегляду.
Таліс К.

1
Порадна інформація: \dvперераховані всі перегляди
Натан Лонг,

120
select pg_get_viewdef('viewname', true)

Перелік усіх цих функцій доступний у посібнику:

http://www.postgresql.org/docs/current/static/functions-info.html


круто, це навіть симпатично друкує! :) У посібнику сказано, що це застаріле, хоча ... :( дякую!
Еліас Дорнелес

8
@elias: просто використовуйте версію, яка використовує OID, select pg_get_viewdef('viewname'::regclass, true)
передавши

2
@elias як альтернатива кастингу, це також працює: SELECT pg_get_viewdef(to_regclass('viewname'))(потрібно принаймні v9.4).
водянка

49
select definition from pg_views where viewname = 'my_view'

1
дякую за це .. він дозволяє отримати доступ до визначення перегляду з моєї програми, а не просто від psql-клієнта.
Домінік Дорн

2
Це має додаткову перевагу в тому, що він працює і для Amazon Redshift.
Brent пише код Код

Це не працює для представлень схем, які не знаходяться на шляху пошуку. І це не розрізняє два погляди з однаковою назвою в різних схемах. Коли я пишу схему, я маю на увазі простір імен, який ви створюєте за допомогою CREATE SCHEMA
Michael Dillon

1
@MichaelDillon зробіть вибір * замість визначення вибору, і ви зможете побачити, з якої схеми подано подання, включаючи деякі інші відомості.
Anders Kreinøe

Якщо ваш погляд не на шляху пошуку, використовуйтеselect definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
bonh

18

Якщо вам потрібна версія ANSI SQL-92:

select view_definition from information_schema.views where table_name = 'view_name';

8

GoodNews з версії 9.6 і вище, редагування перегляду тепер вихідне з psql. Просто викликайте \evкоманду. Визначення перегляду відображатимуться у налаштованому редакторі.

julian@assange=# \ev {your_view_names}

Бонус. Якась корисна команда для взаємодії з буфером запитів.

Query Buffer
  \e [FILE] [LINE]       edit the query buffer (or file) with external editor
  \ef [FUNCNAME [LINE]]  edit function definition with external editor
  \ev [VIEWNAME [LINE]]  edit view definition with external editor
  \p                     show the contents of the query buffer
  \r                     reset (clear) the query buffer
  \s [FILE]              display history or save it to file
  \w FILE                write query buffer to file

4
Ха-ха, тільки привітати його. він докладе багато до psql в перші дні. git.postgresql.org/gitweb/…
Brain90

3

Це маленька річ, яку слід зазначити.
Використовуючи функцію pg_get_viewdef або pg_views або information_schema.views, ви завжди отримаєте перезаписану версію свого оригінального DDL.
Переглянута версія може бути або не збігатися з оригінальним сценарієм DDL.

Якщо Менеджер правил переписає визначення перегляду, ваша початкова DLL буде втрачена, і ви зможете прочитати єдину переписану версію свого перегляду.
Не всі перегляди переписані, але якщо ви використовуєте підбір або приєднання, можливо, ваші погляди будуть перероблені.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.