Yritän oppia PostgreSQL-hallintoa ja olen oppinut käyttämään komentorivityökalua psql
.
Kun kirjaudun sisään osoitteella psql --username=postgres
, miten luetellaan kaikki tietokannat ja taulukot?
Olen kokeillut \d
, d
ja dS+
, mutta mitään ei ole luettelossa. Olen luonut kaksi tietokantaa ja muutaman taulukon pgAdmin III: lla, joten tiedän, että ne pitäisi luetella.
Kommentit
Vastaa
Huomaa seuraavat komennot:
-
\list
tai\l
: luetteloi kaikki tietokannat -
\dt
: luetteloi kaikki nykyisen tietokannan taulukotsearch_path
-
\dt *.
: listaa kaikki nykyisen tietokannan taulukotsearch_path
Et koskaan näe taulukoita muissa tietokannoissa, nämä taulukot aren ei ole näkyvissä. Sinun on muodostettava yhteys oikeaan tietokantaan, jotta näet sen taulukot (ja muut objektit).
Tietokantojen vaihtaminen:
\connect database_name
tai \c database_name
Katso psql -opasta.
Kommentit
- Voit muodostaa yhteyden tiettyyn tietokantaan käyttämällä
\c db_name
. -
\dt
ei ’ näyttää olevan luettelo kaikista nykyisen tietokannan taulukoista (näyttää siltä, että ne sulkevat pois ne ’ t, jotka eivät olesearch_path
ainakin kohdassa 9.2) -
\dt *.
listaa kaikki taulukot kaikissa skeemeissä ilman, että sinun tarvitsee muokata hakupolkua. - \ l + on suosikkini – se näyttää myös levyn käytön.
- Windowsissa voin luetella tietokannat tällä komennolla
psql -U username -l
, mutta se ei toimi kauttaviivan version kanssa.
vastaus
Tässä luetellaan tietokannat:
SELECT datname FROM pg_database WHERE datistemplate = false;
Tässä luetellaan taulukot nykyisessä tietokannassa.
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Kommentit
- Sinä ’ on oikeassa, mutta kysymys koski psql-työkalun metakomentoja. \ dt on paljon helpompaa kuin minkä tahansa kyselyn kirjoittaminen.
- Luulen, että tämä on Hieno vastaus, koska se voidaan suorittaa Linux-komentoriviltä sen sijaan, että tarvitsisit olla psql-tulkissa, joka joskus jumittuu minulle käyttämällä ExtraPutty.
- Pelasti myös päiväni. Erityistapauksessani ’ m lisäämällä
WHERE table_schema = 'public'
, koska haluan jättää vain mukautetut taulukot. - Jos aloitat psql -E-lipun kanssa, se näyttää todellisen kyselyn, kun käytät metakomentoa.
- Kyllä, mielestäni se on ’ hyvä vastaus avulla voit liittyä ja kysellä tietokantoja hallitummin varsinkin kun haluat luoda jonkin käsikirjoituksen suuresta tietokantaluettelosta. Kiitos.
Vastaa
Postgresql: ssä nämä terminaalikomennot luetellaan käytettävissä olevat tietokannat
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
Tai komento ilmoitettiin yksinkertaisemmin:
psql -U pgadmin -l
Nämä komennot tulostavat tämän päätelaitteelle:
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)
Nämä ovat käytettävissä olevia tietokantoja.
PSQL: ssä nämä komennot luetellaan käytettävissä olevat taulukot
Sinun on määritettävä tietokanta ennen kuin aloitat voi luetteloida taulukot kyseisessä tietokannassa.
el@defiant$ psql -U pgadmin -d kurz_prod
Tämä johtaa sinut psql-päätelaitteeseen:
kurz_prod=#
Käytä komentoa \d
tarkoittaen kaikkien taulukoiden, näkymien ja jaksojen näyttämistä
kurz_prod=# \d
Tämä tulostaa:
List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows)
Poistu sitten psql-päätteestä kirjoittamalla \q
ja painamalla Enter-näppäintä. Tai Ctrl-D
tekee saman. Nämä ovat kyseisen tietokannan taulukoita.
Kommentit
- \ d ei vain luetella taulukoita:
\d[S+] list tables, views, and sequences
- Minulle tämä on ” oikea ” vastaus, koska se ei ’ t edellyttää, että olet jo yhteydessä olemassa olevaan tietokantaan.
- Yksi linja skripteissä käytettäväksi (pääkäyttäjänä):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Vastaus
\l
on myös lyhenne sanoille \list
. Siellä on melko paljon kauttaviivakomentoja, jotka voit luetella psql: ssä käyttämällä \?
.
Vastaa
Saadaksesi lisätietoja tietokannasta ja taulukkoluettelosta, voit:
\l+
tietokantojen luettelointiin
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)
ja
\d+
näyttää kaikki nykyisen tietokannan nykyisen hakupolun skeeman taulukot.
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)
Vastaa
Pg_Admin -sovelluksesta voit yksinkertaisesti suorittaa seuraavat tiedot nykyisessä tietokannassasi, jolloin kaikki määritetyn skeeman taulukot saadaan:
SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name
Tämä saa sinut luettelo kaikista pysyvistä taulukoista (yleensä etsimäsi taulukot). Voit saada vain taulukoiden nimet, jos muutat *
-merkkimerkiksi vain table_name
. Julkinen table_schema
on useimpien tietokantojen oletusmalli, ellei järjestelmänvalvoja ole asettanut uutta mallia.
Kommentit
- Vaikka tämä onkin totta, tämä osoitetaan eri asiakkaalle kuin OP kysyi.
- Tämä toimi minulle hyvin, ja vaikka käyttötapaukseni ei ollut täsmälleen sama kuin OP pyysi, se auttoi minua saamaan pöydäluettelon ollessani yhteydessä kääreen ( Julialangissa LibPQ.jl )
Vastaa
On mahdollista, että olet lisännyt taulukot skeema, joka ei ole hakupolulla, tai oletus, ts. julkinen, joten taulukot eivät näy \ dt: llä. Jos käytät mallia, jota kutsutaan esimerkiksi dataksi, voit korjata ongelman suorittamalla
alter database <databasename> set search_path=data, public;
Poistu ja kirjoita psql uudelleen ja nyt \ dt näyttää myös taulukot kaaviotiedoissa.
Kommentit
- No, yksinkertainen
set search_path=data, public;
tekisi myös tempun 🙂 - @dezso, tekeekö se muutoksen pysyvästi vai vain siinä psql-istunnossa?
- Virhe, en ollut kovin selvä. Se oli tarkoitettu uloskirjautumis-kirjautumisjakson sijaan.
psql -l
psql --username=postgres -l
.