Încerc să învăț administrarea PostgreSQL și am început să învăț cum să folosesc instrumentul pentru linia de comandă psql
.
Când mă conectez cu psql --username=postgres
, cum pot lista toate bazele de date și tabelele?
Am încercat \d
, d
și dS+
dar nimic nu este listat. Am creat două baze de date și câteva tabele cu pgAdmin III, așa că știu că ar trebui să fie listate.
Comentarii
Răspunde
Vă rugăm să rețineți următoarele comenzi:
-
\list
sau\l
: listați toate bazele de date -
\dt
: listează toate tabelele din baza de date curentă utilizândsearch_path
-
\dt *.
: listați toate tabelele din baza de date curentă, indiferent desearch_path
Nu veți vedea niciodată tabele în alte baze de date, aceste tabele nu sunt vizibile. Trebuie să vă conectați la baza de date corectă pentru a vedea tabelele sale (și alte obiecte).
Pentru a schimba baza de date:
\connect database_name
sau \c database_name
Consultați manualul despre psql .
Comentarii
- Puteți utiliza
\c db_name
pentru a vă conecta la o anumită bază de date. -
\dt
doesn ‘ nu pare să listeze toate tabelele din baza de date curentă (se pare că le exclude pe cele care nu sunt ‘ t găsite însearch_path
cel puțin la 9.2) -
\dt *.
va afișa toate tabelele din toate schemele, fără a fi nevoie să vă modificați calea de căutare. - \ l + este preferatul meu – arată și utilizarea discului.
- Pe Windows pot lista bazele de date cu această comandă
psql -U username -l
, dar nu funcționează cu versiunea slash.
Răspuns
Aceasta listează bazele de date:
SELECT datname FROM pg_database WHERE datistemplate = false;
Aceasta listează tabelele din baza de date curentă
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Comentarii
- Tu ‘ este corect, dar întrebarea a fost despre meta-comenzi ale instrumentului psql. \ dt este mult mai ușor decât să tastați orice interogare.
- Cred că acesta este un răspuns MARE, deoarece poate fi executat de pe o linie de comandă Linux, spre deosebire de necesitatea de a fi în interpretorul psql, care uneori se blochează pentru mine folosind ExtraPutty.
- De asemenea, mi-am salvat ziua. Pentru cazul meu particular, ‘ m adaug
WHERE table_schema = 'public'
deoarece vreau să renunț doar la tabele personalizate. - Dacă începeți psql cu steagul -E, va afișa interogarea reală atunci când utilizați o meta-comandă.
- Da, cred că ‘ este un răspuns bun, deoarece vă permite să vă alăturați și să interogați bazele de date într-un mod mai controlat, mai ales atunci când doriți să generați un script dintr-o listă mare de baze de date. Mulțumesc.
Răspuns
În Postgresql aceste comenzi de terminal listează bazele de date disponibile
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
Sau comanda a declarat mai simplu:
psql -U pgadmin -l
Aceste comenzi imprimă acest lucru pe terminal:
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+-------------+-------------+----------------------- kurz_prod | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | pgadmin | pgadmin | UTF8 | en_US.UTF-8 | en_US.UTF-8 | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (5 rows)
Acestea sunt bazele de date disponibile.
În PSQL aceste comenzi listează tabelele disponibile
Trebuie să specificați o bază de date înainte de a vă poate lista tabelele din baza de date respectivă.
el@defiant$ psql -U pgadmin -d kurz_prod
Acest lucru vă aduce la un terminal psql:
kurz_prod=#
Utilizați comanda \d
adică arată toate tabelele, vizualizările și secvențele
kurz_prod=# \d
Aceasta imprimă:
List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows)
Apoi, pentru a ieși din terminalul psql, tastați \q
și apăsați Enter. Sau Ctrl-D
face același lucru. Acestea sunt tabelele din baza de date respectivă.
Comentarii
- \ d nu doar listează tabele:
\d[S+] list tables, views, and sequences
- Pentru mine, acesta este răspunsul ” corect ” deoarece nu ‘ nu necesită să fiți deja conectat la o bază de date existentă.
- Un liner pentru utilizare în scripturi (ca root):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Răspuns
\l
este, de asemenea, prescurtat pentru \list
. Există destul de multe comenzi oblice, pe care le puteți lista în psql folosind \?
.
Răspuns
Pentru a obține mai multe informații despre baza de date și lista de tabele, puteți face:
\l+
pentru listarea bazelor de date
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description ------------+----------+----------+-------------+-------------+-----------------------+---------+------------+-------------------------------------------- pgbench | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 29 MB | pg_default | postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 6073 kB | pg_default | default administrative connection database slonmaster | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 1401 MB | movespace | slonslave | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 32 MB | pg_default | template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5785 kB | pg_default | unmodifiable empty database | | | | | postgres=CTc/postgres | | | template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +| 5985 kB | pg_default | default template for new databases | | | | | postgres=CTc/postgres | | | test | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 13 MB | pg_default | (7 rows)
și
\d+
pentru a lista toate tabelele din schema curentă search_path din baza de date curentă.
test=# \dn+ --list schemas List of schemas Name | Owner | Access privileges | Description --------+----------+----------------------+------------------------ public | postgres | postgres=UC/postgres+| standard public schema | | =UC/postgres | schema1 | postgres | postgres=UC/postgres+| | | =UC/postgres | (2 row) test=# set search_path to schema1, public; SET test=# \d+ List of relations Schema | Name | Type | Owner | Size | Description ---------+-----------------+-------+--------------+------------+------------- public | all_units | table | postgres | 0 bytes | public | asset | table | postgres | 16 kB | public | asset_attribute | table | postgres | 8192 bytes | public | food | table | postgres | 48 kB | public | name_log | table | postgres | 8192 bytes | public | outable | table | ordinaryuser | 0 bytes | public | outable2 | table | ordinaryuser | 0 bytes | public | test | table | postgres | 16 kB | public | usr | table | postgres | 5008 kB | schema1 | t1 | table | postgres | 0 bytes | (10 rows)
Răspuns
De la pg_Admin puteți pur și simplu rula următoarele în baza de date curentă și va primi toate tabelele pentru schema specificată:
SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name
Acest lucru vă va ajuta o listă cu toate tabelele permanente (în general tabelele pe care le căutați). Puteți obține doar numele tabelelor dacă schimbați caracterul comod *
la doar table_name
. Publicul table_schema
este schema implicită pentru majoritatea bazelor de date, cu excepția cazului în care administratorul dvs. a configurat o schemă nouă.
Comentarii
- Deși acest lucru este adevărat, acesta se adresează unui alt client decât l-a întrebat OP.
- Acest lucru a funcționat excelent pentru mine și, deși cazul meu de utilizare nu a fost exact ceea ce mi-a cerut OP, m-a ajutat să obțin lista tabelelor în timp ce eram conectat prin wrapper (în Julialang LibPQ.jl )
Răspuns
Este posibil să fi introdus tabelele într-un schema care nu se află în calea dvs. de căutare sau implicită, adică publică și astfel tabelele nu vor apărea folosind \ dt. Dacă utilizați o schemă numită, să zicem, date, puteți remedia acest lucru executând,
alter database <databasename> set search_path=data, public;
Ieșiți și reintroduceți psql și acum \ dt vă va arăta și tabelele din datele schemei.
Comentarii
- Ei bine, un simplu
set search_path=data, public;
ar face și trucul 🙂 🙂 - @dezso, asta face schimbarea permanentă, sau doar în acea sesiune psql?
- Nu, nu am fost foarte clar. A fost conceput în locul ciclului de deconectare-autentificare.
psql -l
psql --username=postgres -l
.