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
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 avsearch_path
-
\dt *.
: liste opp alle tabellene i den gjeldende databasen uansettsearch_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 isearch_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.
psql -l
psql --username=postgres -l
.