Cum listez toate bazele de date și tabelele folosind psql?

Î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

  • Dacă doriți să accesați prin linia de comandă, rulați psql -l
  • Acest comentariu ar trebui să fie cu siguranță unul dintre cele mai bune răspunsuri! Dacă aveți nevoie de autentificare, puteți, de asemenea, psql --username=postgres -l.

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ând search_path
  • \dt *.: listați toate tabelele din baza de date curentă, indiferent de search_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 în search_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.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *