Szukam dokładnej informacji w bazie danych, o której nie mam żadnej wiedzy.
To jest produkt innej firmy, oni wolno odpowiadają na niektóre pytania i wiem, że dane znajdują się w tej bazie danych, więc chcę trochę popracować nad inżynierią retro.
Biorąc pod uwagę jedna tabela, czy można mieć listę nazw kolumn tej tabeli?
 Na przykład w SqlServer można zrzucić tabelę do wielokrotnego użytku CREATE, które tekstowo wymienia wszystkie kolumny, z których składa się tabela. 
Komentarze
Odpowiedź
 Oprócz wiersza poleceń \d+ <table_name>, które już znalazłeś, możesz użyj również  schematu informacyjnego , aby wyszukać dane kolumny, używając  information_schema.columns : 
SELECT * FROM information_schema.columns WHERE table_schema = "your_schema" AND table_name = "your_table" ; 
Uwaga: Jak w powyższym przykładzie, upewnij się, że wartości są ujęte w cudzysłowy.
Komentarze
-  W psql użyj 
\x onlub\pset expanded on, aby utworzyć zapytanie wyniki są liniowe (zamiast tabelaryczne), a przez to łatwiejsze do odczytania stackoverflow.com/a/9605093/513397 -  W aktualnych wersjach (wypróbowałem w 9.6) możesz zrobić w psql 
\d+ public.*, aby uzyskać opis (schemat + indeces / fkeys / triggers) wszystkich swoich tabel i widoków wpublicschemat. Używamy go w naszym skrypcie przechwytującym przed zatwierdzeniem, aby śledzić zmiany w bazie danych dokonywane przez każde zatwierdzenie. - SELECT nazwa_kolumny, aby uzyskać tylko nazwę kolumny
 
Odpowiedź
Jako uzupełnienie innych odpowiedzi, nawet instrukcja SELECT, która nie zwraca żadnych wierszy, ujawni nazwy kolumn Tobie i kodowi aplikacji.
select * from table_name where false; 
W przypadku każdego z tych podejść w grę mogą wchodzić uprawnienia.
Komentarze
- Zakładam, że chcesz przekazać ten kod SQL do polecenia psql. Proponuję użyć w takim przypadku opcji –no-psqlrc, aby uniknąć niespodzianek na wyjściu.
 - Z wyjątkiem ukrytych kolumn, które musiały być określone, aby były wybrane (jak pg_class.oid)
 
Odpowiedź
schemat informacji to powolny i pewny sposób: jest ustandaryzowany i w dużej mierze przenośny do innych baz danych, które go obsługują. I będzie nadal działać w głównych wersjach.
 Jednak  wyświetlenia  w schemacie informacyjnym często dołączają do wiele tabel z   katalogów systemowych  , aby ściśle znormalizowany format – z których wiele to przez większość czasu martwy ładunek. To sprawia, że  powolne . 
 Programiści Postgres nie obiecują, ale podstawy (takie jak to, co jest tutaj potrzebne) nie zmienią się w głównych wersjach. 
 psql (natywny interfejs wiersza poleceń) zajmuje oczywiście szybką ścieżkę i bezpośrednio pyta o źródło . Jeśli rozpoczniesz  psql z parametrem -E , kod SQL za Wyświetlane są polecenia z ukośnikiem odwrotnym, takie jak \d. Lub \set ECHO_HIDDEN on z wiersza poleceń psql. Zaczynając od tego miejsca możesz zbudować odpowiedź na swoje pytanie. 
Biorąc pod uwagę jedną tabelę, czy można mieć listę nazw kolumn do table.
SELECT attrelid::regclass AS tbl , attname AS col , atttypid::regtype AS datatype -- more attributes? FROM pg_attribute WHERE attrelid = "myschema.mytable"::regclass -- table name, optionally schema-qualified AND attnum > 0 AND NOT attisdropped ORDER BY attnum; 
 Szybciej niż  zapytania information_schema.columns . Spróbuj EXPLAIN ANALYZE i przekonaj się sam. Wciąż nie ma znaczenia dla jednorazowego wyszukiwania. Ale może mieć znaczenie, jeśli zostanie użyte w zapytaniu / funkcji, która jest wielokrotnie powtarzana. 
Istnieją również drobne różnice w widoczności. Szczegółowe porównanie:
Komentarze
-  Naprawdę w ten sposób pokazujesz 
-Ei pokazujesz ludziom, jak zdobyć sql psql. - Zgadzam się.Przeprowadziłem kilka testów szybkości i pg_catalog działa ponad 2x szybciej
 
Odpowiedź
 psql na PostgreSQL 11+ 
 Jeśli szukasz typów kolumn w zapytaniu, możesz użyć  psql „s \gdesc  
SELECT NULL AS zero, 1 AS one, 2.0 AS two, "three" AS three, $1 AS four, sin($2) as five, "foo"::varchar(4) as six, CURRENT_DATE AS now \gdesc Column | Type --------+---------------------- zero | text one | integer two | numeric three | text four | text five | double precision six | character varying(4) now | date (8 rows) 
Odpowiedź
Tylko PostgreSQL
To trochę dziwaczne, ale może być rywalem, jeśli szukasz możliwie najkrótszego SQL:
SELECT json_object_keys(to_json(json_populate_record(NULL::schema_name.table_name, "{}"::JSON))) 
lub nawet krócej (zakładając, że w tabeli jest co najmniej jeden wiersz)
SELECT json_object_keys(to_json((SELECT t FROM schema_name.table_name t LIMIT 1))) 
 Lista zachowuje kolejność. Jeśli nie przejmujesz się zamówieniem i masz zainstalowane rozszerzenie hstore, możesz zrobić jeszcze krócej 
SELECT skeys(hstore(NULL::schema_name.table_name)) 
\dt[+] table_namewpsql.