Czy istnieje łatwy sposób, aby zobaczyć kod użyty do utworzenia widoku za pomocą klienta wiersza poleceń PostgreSQL?
Coś jak SHOW CREATE VIEW
z MySQL.
Czy istnieje łatwy sposób, aby zobaczyć kod użyty do utworzenia widoku za pomocą klienta wiersza poleceń PostgreSQL?
Coś jak SHOW CREATE VIEW
z MySQL.
Odpowiedzi:
Ciągle musiałem wracać tutaj, aby spojrzeć w górę pg_get_viewdef
(jak to zapamiętać !!), więc szukałem bardziej zapadającego w pamięć polecenia ... i otrzymałem:
\d+ viewname
Możesz zobaczyć podobne rodzaje poleceń, wpisując \?
w wierszu poleceń pgsql.
Dodatkowa wskazówka: polecenie emacs sql-postgres
sprawia, że pgsql jest o wiele przyjemniejszy (edycja, kopiowanie, wklejanie, historia poleceń).
\dv
zawiera listę wszystkich wyświetleń
select pg_get_viewdef('viewname', true)
Lista wszystkich tych funkcji jest dostępna w instrukcji:
http://www.postgresql.org/docs/current/static/functions-info.html
select pg_get_viewdef('viewname'::regclass, true)
SELECT pg_get_viewdef(to_regclass('viewname'))
(wymaga co najmniej wersji 9.4).
select definition from pg_views where viewname = 'my_view'
select definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
Jeśli chcesz mieć wersję ANSI SQL-92:
select view_definition from information_schema.views where table_name = 'view_name';
GoodNews od wersji 9.6 i nowszych, edycja widoku jest teraz natywna z psql. Po prostu wywołaj \ev
polecenie. Definicje widoku pojawią się w skonfigurowanym edytorze.
julian@assange=# \ev {your_view_names}
Premia. Kilka przydatnych poleceń do interakcji z buforem zapytań.
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
To drobiazg, na który należy zwrócić uwagę.
Używając funkcji pg_get_viewdef lub pg_views lub information_schema.views , zawsze otrzymasz przepisaną wersję swojego oryginalnego DDL.
Przeredagowana wersja może być taka sama, jak pierwotny skrypt DDL, ale nie musi.
Jeśli Menedżer reguł przepisze definicję widoku, oryginalna biblioteka DLL zostanie utracona i będzie można odczytać jedyną przepisaną wersję definicji widoku.
Nie wszystkie widoki są przepisywane, ale jeśli użyjesz sub-select lub łączenia, prawdopodobnie Twoje widoki zostaną przepisane.