Czy istnieje zapytanie lub polecenie PostgreSQL, które zwraca nazwy pól i typy pól zapytania, tabeli lub widoku?
Np. Rozwiązanie zastosowane do prostej kwerendy SELECT, takie jak, SELECT * from person
powinno zwrócić listę taką jak:
Column Name | Column Type
===========================
First Name | character
Last Name | character
Age | integer
Date of Birth | date
Przejrzałem information_schema
poglądy opisane w odpowiedzi poniżej i wydaje się, że całkiem dobrze pokrywają tabele, i podejrzewam, że obejmuje to również poglądy, ale jeszcze tego nie sprawdziłem.
Ostatnim jest jakaś arbitralna, ale ważne np kwerendy SELECT udziałem, JOINS
, UNIONS
etc, w bazie danych. Czy istnieje wbudowana procedura lub inna procedura składowana lub skrypt, który może zwrócić to samo dla dowolnego ważnego zapytania?
Tworzę program, który tworzy dane i formularze zapytań, a informacje są potrzebne do sprawdzania poprawności danych i wykonywania funkcji na zwróconych danych.
źródło
SELECT
Zapytania, tj. Zapytania nie definiujące danych lub manipulujące danymi, czy to w tabelach, widokach lub innych zapytaniach, zwracają wiersze i kolumny danych, więc PostgreSQL powinien mieć możliwość zwrócenia lista nazw kolumn i ich typów danych. Teinformation_schema
poglądy wymienione poniżej w odpowiedziach pojawia się odpowiedzieć na tabele i widoki. Arbitralne zapytania SELECT są ostatnią granicą.Odpowiedzi:
Schemat informacyjny a katalogi systemowe
Rozmawialiśmy o tym wiele razy. Schemat informacyjny służy określonym celom. Jeśli znasz się na katalogach systemowych, lepiej służą one większości celów , IMO. Katalogi systemowe są faktycznym źródłem wszystkich informacji.
Schematu informacji dostarcza znormalizowane widoki, które pomagają z przenośności, głównie po drugiej wersji główne PostgreSQL, ponieważ przenośność między różnymi platformami RDBMS zazwyczaj jest iluzją, gdy Twoje zapytania są wyrafinowane wystarczy potrzeby patrzenia w górę katalogów systemowych. Co ważne, Oracle nadal nie obsługuje schematu informacji.
Widoki w schemacie informacyjnym muszą przeskakiwać przez wiele obręczy, aby osiągnąć format zgodny ze standardem. Powoduje to, że są powolne, a czasem bardzo wolne. Porównaj plany i wydajność dla tych podstawowych obiektów:
Różnica jest niezwykła. To naprawdę zależy od tego, czego szukasz.
Twój przykład
Na przykład
SELECT * from tbl
porównaj dwa poniższe zapytania do tej prostej tabeli:Używanie
pg_attribute
:format_type()
zwraca pełny typ ze wszystkimi modyfikatorami:Zauważ też, że rzutowanie
regclass
rozwiązuje nazwę tabeli nieco inteligentnie zgodnie z bieżącymsearch_path
. Zgłasza także wyjątek, jeśli nazwa jest niepoprawna. Detale:Używanie
information_schema.columns
:Informacje są znormalizowane, ale niekompletne :
Aby uzyskać pełne informacje o typie danych, należy dodatkowo rozważyć wszystkie te kolumny:
Powiązane odpowiedzi:
Lista zalet i wad , największe zalety (IMO) pogrubione:
Widoki schematu informacyjnego
Katalogi systemowe
oid
zestawie)Dowolne zapytanie
Aby uzyskać tę samą listę nazw i typów kolumn z zapytania, możesz użyć prostej sztuczki: UTWÓRZ tabelę tymczasową z wyniku zapytania, a następnie użyj tych samych technik, jak powyżej.
Możesz dołączyć
LIMIT 0
, ponieważ nie potrzebujesz rzeczywistych danych:Aby uzyskać typ danych poszczególnych kolumn, możesz również użyć funkcji
pg_typeof()
:źródło
Możesz użyć
psql
klienta wiersza poleceń.\dt
pokaże listę tabel\dv
pokaże listę widoków\d [object_name]
opiszę schemat tabeli lub widokuNie jestem jednak pewien, jak opisałbyś zapytanie.
Więcej informacji: https://manikandanmv.wordpress.com/tag/basic-psql-commands/
źródło
Jeśli masz dostęp do pg_catalog i używasz PgAdmin3, gorąco polecam rozwiązanie, które znalazłem na blogu Valentine's Tech ( http://tech.valgog.com/2011/02/pgadmin-iii-macros-get-table-fields. HTML ). Jest to makro PgAdmin3, do którego można uzyskać dostęp za pomocą skrótu, aby wyświetlić definicję nazwy wybranej tabeli.
Działa jak urok i jest niezwykle przydatny.
źródło
Użyj tych
information_schema
poglądów , są standardem SQL i zawierają informacje, które chcesz.Można także bezpośrednio dostępu
pg_class
,pg_attribute
itp, ale to nieprzenośne i często fiddlier; może trzeba pomocnicze funkcje, takie jakoidvectortypes
,pg_get_function_arguments
itp dla niektórych rzeczy.Jeśli chcesz zobaczyć, jak
psql
wykonuje się coś takiego\dt
, uruchompsql -E
- wypisze zapytanie. Jednak zwykle lepiej jest użyć opcji,information_schema
jeśli spełni ona Twoje potrzeby.źródło
Może to być zbyt proste, ale pgAdmin4 pokazuje typy pól w wynikach wyjściowych. Inne powyższe rozwiązania są prawdopodobnie bardziej eleganckie, ale kiedy potrzebuję tylko szybkiej odpowiedzi, okazuje się, że GUI zapytania pgAdmin4 działa całkiem dobrze. Próba ustalenia typu pola pola obliczonego zwróconego przez widok lub funkcję może być trudna.
źródło