Hvordan lister jeg opp alle databaser og tabeller ved hjelp av psql?

Jeg prøver å lære PostgreSQL-administrasjon og har begynt å lære hvordan jeg bruker psql kommandolinjeverktøyet.

Når jeg logger på med psql --username=postgres, hvordan lister jeg opp alle databaser og tabeller?

Jeg har prøvd \d, d og dS+ men ingenting er oppført. Jeg har opprettet to databaser og noen få tabeller med pgAdmin III, så jeg vet at de skal være oppført.

Kommentarer

  • Hvis du vil ha tilgang til det via kommandolinjen, kjør psql -l
  • Denne kommentaren burde absolutt være et av de beste svarene! Hvis du trenger godkjenning, kan du også psql --username=postgres -l.

Svar

Vær oppmerksom på følgende kommandoer:

  • \list eller \l: liste opp alle databaser
  • \dt: liste opp alle tabellene i gjeldende database ved hjelp av search_path
  • \dt *.: liste opp alle tabellene i den gjeldende databasen uansett search_path

Du vil aldri se tabeller i andre databaser, disse tabellene er ikke synlig. Du må koble til riktig database for å se tabellene (og andre objekter).

Slik bytter du databaser:

\connect database_name eller \c database_name

Se håndboken om psql .

Kommentarer

  • Du kan bruke \c db_name for å koble til en bestemt database.
  • \dt ikke ‘ ser ikke ut til å liste opp alle tabellene i gjeldende database (det ser ut til å ekskludere de som ikke er ‘ t som finnes i search_path minst 9.2)
  • \dt *. vil liste opp alle tabellene i alle skjemaer, uten å måtte endre søkebanen.
  • \ l + er min favoritt – den viser også diskbruken.
  • På Windows kan jeg liste opp databasene med denne kommandoen psql -U username -l, men den fungerer ikke med skråstrekversjonen.

Svar

Dette viser databaser:

SELECT datname FROM pg_database WHERE datistemplate = false; 

Dette viser tabeller i gjeldende database

SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name; 

Kommentarer

  • Du ‘ har rett, men spørsmålet handlet om metakommandoer til psql-verktøyet. \ dt er mye enklere enn å skrive noen spørsmål.
  • Jeg synes dette er et STOR svar fordi det kan kjøres fra en Linux-kommandolinje i motsetning til å måtte være i psql-tolk som noen ganger henger for meg ved å bruke ExtraPutty.
  • Reddet også dagen min. I mitt spesielle tilfelle ‘ m legger jeg til WHERE table_schema = 'public' fordi jeg bare vil slippe tilpassede tabeller.
  • Hvis du begynner psql med -E-flagget, den viser den virkelige spørringen når du bruker en metakommando.
  • Ja, jeg tror det ‘ et godt svar som det lar deg bli med og spørre databasene på en mer kontrollert måte, spesielt når du vil generere noe skript fra en stor databaseliste. Takk.

Svar

I Postgresql viser disse terminalkommandoene tilgjengelige databaser

el@defiant$ /bin/psql -h localhost --username=pgadmin --list 

Eller kommandoen sa enklere:

psql -U pgadmin -l 

Disse kommandoene skriver ut dette på terminalen:

 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) 

Dette er de tilgjengelige databasene.

I PSQL viser disse kommandoene de tilgjengelige tabellene

Du må spesifisere en database før du kan liste opp tabellene i den databasen.

el@defiant$ psql -U pgadmin -d kurz_prod 

Dette bringer deg til en psql-terminal:

kurz_prod=# 

Bruk kommandoen \d som betyr å vise alle tabeller, visninger og sekvenser

kurz_prod=# \d 

Dette skrives ut:

 List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows) 

For å avslutte psql-terminalen, skriv \q og trykk enter. Eller Ctrl-D gjør det samme. Dette er tabellene i den databasen.

Kommentarer

  • \ d viser ikke bare tabeller: \d[S+] list tables, views, and sequences
  • For meg er dette » riktig » svaret fordi det ikke ‘ krever ikke at du allerede er koblet til en eksisterende database.
  • En foring for bruk i skript (som root): su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'

Svar

\l er også stenografi for \list. Det er ganske mange skråstrekommandoer, som du kan føre opp i psql ved å bruke \?.

Svar

For å få mer informasjon om database og tabelliste, kan du gjøre:

\l+ for å liste databaser

 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) 

og

\d+ for å liste opp alle tabellene i gjeldende søkeskjema i gjeldende database.

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) 

Svar

Fra pg_Admin kan du ganske enkelt kjøre følgende på din nåværende database, så får du alle tabellene for det angitte skjemaet:

SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name 

Dette gir deg en liste over alle de permanente tabellene (vanligvis tabellene du leter etter). Du kan få bare tabellnavnene hvis du endrer * jokertegnet til bare table_name. Det offentlige table_schema er standardskjema for de fleste databaser med mindre administratoren din har satt opp et nytt skjema.

Kommentarer

  • Selv om dette stemmer, adresserer dette en annen klient enn OP spurte om.
  • Dette fungerte bra for meg, og selv om brukssaken min ikke var akkurat det OP ba om, hjalp det meg å få tabellisten mens jeg var koblet til via innpakning (i Julialang LibPQ.jl )

Svar

Det er mulig du har satt inn tabellene i en skjema som ikke er i søkebanen din, eller standard, dvs. offentlig, og slik at tabellene ikke vises med \ dt. Hvis du bruker et skjema som heter data, kan du fikse dette ved å kjøre,

alter database <databasename> set search_path=data, public;

Avslutt og skriv inn psql og nå \ dt vil også vise deg tabellene i skjemadata.

Kommentarer

  • Vel, en enkel set search_path=data, public; ville gjøre susen også 🙂
  • @dezso, gjør det endringen permanent, eller bare i den psql-økten?
  • Feil, jeg var ikke veldig tydelig. Det var ment i stedet for påloggingssyklusen.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *