Hvordan viser jeg alle databaser og tabeller ved hjælp af psql?

Jeg prøver at lære PostgreSQL-administration og er begyndt at lære at bruge kommandolinjeværktøjet psql.

Når jeg logger ind med psql --username=postgres, hvordan viser jeg alle databaser og tabeller?

Jeg har prøvet \d, d og dS+ men intet er angivet. Jeg har oprettet to databaser og et par tabeller med pgAdmin III, så jeg ved, at de skal vises.

Kommentarer

  • Hvis du vil have adgang til det via kommandolinjen, kør psql -l
  • Denne kommentar skal bestemt være et af de bedste svar! Hvis du har brug for godkendelse, kan du også psql --username=postgres -l.

Svar

Vær opmærksom på følgende kommandoer:

  • \list eller \l: liste alle databaser
  • \dt: liste alle tabeller i den aktuelle database ved hjælp af din search_path
  • \dt *.: liste alle tabeller i den aktuelle database uanset din search_path

Du vil aldrig se tabeller i andre databaser, disse tabeller er ikke synlig. Du skal oprette forbindelse til den korrekte database for at se dens tabeller (og andre objekter).

For at skifte database:

\connect database_name eller \c database_name

Se vejledningen om psql .

Kommentarer

  • Du kan bruge \c db_name til at oprette forbindelse til en bestemt database.
  • \dt ikke ‘ ser ikke ud til at liste alle tabeller i den aktuelle database (det ser ud til at udelukke dem, der ikke findes ‘ t i search_path mindst 9.2)
  • \dt *. viser alle tabeller i alle skemaer uden at skulle ændre din søgesti.
  • \ l + er min favorit – det viser også diskforbruget.
  • På Windows kan jeg liste databaserne med denne kommando psql -U username -l men det fungerer ikke med skråstregversionen.

Svar

Dette viser databaser:

SELECT datname FROM pg_database WHERE datistemplate = false; 

Dette viser tabeller i den aktuelle database

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

Kommentarer

  • Du ‘ har ret, men spørgsmålet var om metakommandoer til psql-værktøjet. \ dt er meget nemmere end at skrive nogen forespørgsel.
  • Jeg synes dette er et STOR svar, fordi det kan udføres fra en Linux-kommandolinje i modsætning til at skulle være i psql-tolken, som nogle gange hænger for mig ved hjælp ExtraPutty.
  • Reddet også min dag. I mit særlige tilfælde ‘ m tilføjer WHERE table_schema = 'public' fordi jeg bare vil droppe tilpassede tabeller.
  • Hvis du starter psql med -E-flag, det viser den rigtige forespørgsel, når du bruger en metakommando.
  • Ja, jeg synes, det ‘ er et godt svar, da det giver dig mulighed for at deltage i og forespørge databaser på en mere kontrolleret måde, især når du vil generere noget script ud af en stor databaseliste. Tak.

Svar

I Postgresql viser disse terminalkommandoer de tilgængelige databaser

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

Eller kommandoen sagde mere enkelt:

psql -U pgadmin -l 

Disse kommandoer udskriver 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 tilgængelige databaser.

I PSQL viser disse kommandoer de tilgængelige tabeller

Du skal angive en database, før du kan angive tabellerne i databasen.

el@defiant$ psql -U pgadmin -d kurz_prod 

Dette bringer dig til en psql-terminal:

kurz_prod=# 

Brug kommandoen \d hvilket betyder at vise alle tabeller, visninger og sekvenser

kurz_prod=# \d 

Dette udskriver:

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

For at afslutte psql-terminalen skal du skrive \q og trykke på enter. Eller Ctrl-D gør det samme. Dette er tabellerne i den database.

Kommentarer

  • \ d viser ikke bare tabeller: \d[S+] list tables, views, and sequences
  • For mig er dette ” korrekt ” svaret, fordi det ikke ‘ kræver ikke, at du allerede er tilsluttet en eksisterende database.
  • En linie til brug i scripts (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. Der er en hel del skråstregkommandoer, som du kan angive i psql ved hjælp af \?.

Svar

For at få mere information om database og tabelliste kan du gøre:

\l+ for at 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 at angive alle tabeller i det aktuelle søgeskibsskema i den aktuelle 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 blot køre følgende på din nuværende database, og det får alle tabellerne til det angivne skema:

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

Dette får dig en liste over alle de permanente tabeller (generelt de tabeller, du leder efter). Du kan få bare tabelnavnene, hvis du ændrer * jokertegnet til bare table_name. Det offentlige table_schema er standardskemaet for de fleste databaser, medmindre din administrator har oprettet et nyt skema.

Kommentarer

  • Selvom dette er sandt, henvender det sig til en anden klient end OPen spurgte om.
  • Dette fungerede godt for mig, og selvom min brugssag ikke var nøjagtigt det, som OP bad om, hjalp det mig med at få listen over tabeller, mens jeg var tilsluttet via indpakning (i Julialang LibPQ.jl )

Svar

Det er muligt, at du har indsat tabellerne i en skema, der ikke er i din søgesti, eller standard, dvs. offentlig, og så vises ikke tabellerne ved hjælp af \ dt. Hvis du bruger et skema kaldet, siger data, kan du rette dette ved at køre

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

Afslut og genindfør psql og nu \ dt viser dig også tabellerne i skemadata.

Kommentarer

  • Nå, en simpel set search_path=data, public; ville også gøre tricket 🙂
  • @dezso, gør det ændringen permanent eller bare i den psql-session?
  • Fejl, jeg var ikke særlig klar. Det var beregnet i stedet for logout-login-cyklussen.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *