Megpróbálom megtanulni a PostgreSQL adminisztrációt, és elkezdtem megtanulni a psql
parancssori eszköz használatát.
Amikor a psql --username=postgres
szolgáltatással jelentkezem be, hogyan sorolhatom fel az összes adatbázist és táblázatot?
Megpróbáltam a következőt: \d
, d
és dS+
, de semmi nincs felsorolva. Két adatbázist és néhány táblázatot hoztam létre a pgAdmin III alkalmazással, így tudom, hogy fel kell venni őket.
Megjegyzések
Válasz
Vegye figyelembe a következő parancsokat:
-
\list
vagy\l
: az összes adatbázis felsorolása -
\dt
: az aktuális adatbázis összes táblája asearch_path
- : az aktuális adatbázis összes tábláját sorolja fel, függetlenül a
search_path
Más adatbázisokban soha nem fog táblázatot látni, ezek a táblák aren nem látható. A táblák (és egyéb objektumok) megtekintéséhez a megfelelő adatbázishoz kell csatlakoznia.
Adatbázisok váltásához:
\connect database_name
vagy \c database_name
Lásd a psql útmutatóját.
Megjegyzések
- A
\c db_name
segítségével csatlakozhat egy bizonyos adatbázishoz. -
\dt
nem ‘ úgy tűnik, hogy az aktuális adatbázis összes tábláját felsorolja (úgy tűnik, kizárja azokat, amelyek ‘ t nem találhatók asearch_path
legalább a 9.2-n) -
\dt *.
felsorolja az összes séma összes tábláját, anélkül, hogy módosítania kellene a keresési útvonalat. - \ l + is a kedvencem – ez mutatja a lemezhasználatot is.
- Windows rendszeren fel tudom sorolni az adatbázisokat ezzel a paranccsal
psql -U username -l
, de nem működik a perjel verzióval.
Válasz
Ez az adatbázisokat sorolja fel:
SELECT datname FROM pg_database WHERE datistemplate = false;
Ez az aktuális adatbázisban szereplő táblázatokat sorolja fel
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Megjegyzések
- Ön ‘ igaza van, de a kérdés a psql-eszköz meta-parancsaira vonatkozott. \ dt sokkal könnyebb, mint bármilyen lekérdezést beírni.
- Úgy gondolom, hogy ez NAGY válasz, mert Linux parancssorból futtatható, szemben azzal, hogy a psql tolmácsban kell lennie, ami néha a számomra függ ExtraPutty.
- Megmentette a napomat is. Saját esetemre ‘ m hozzáadom a
WHERE table_schema = 'public'
-t, mert csak egyéni táblákat szeretnék eldobni. - Ha elkezdi A psql az -E zászlóval megjeleníti a valódi lekérdezést, amikor meta-parancsot használ.
- Igen, szerintem ‘ jó válasz, mivel lehetővé teszi, hogy kontrolláltabban csatlakozzon és lekérdezze az adatbázisokat, különösen akkor, ha egy szkriptet elő akar állítani egy nagy adatbázis-listából. Köszönet.
Válasz
A Postgresql-ben ezek a terminálparancsok felsorolják az elérhető adatbázisokat
el@defiant$ /bin/psql -h localhost --username=pgadmin --list
Vagy a parancs egyszerűbben megfogalmazta:
psql -U pgadmin -l
Ezek a parancsok ezt kinyomtatják a terminálon:
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)
Ezek az elérhető adatbázisok.
A PSQL-ben ezek a parancsok felsorolják a rendelkezésre álló táblázatokat
Adatbázist kell megadnia, mielőtt felsorolhatja az adott tábla tábláit.
el@defiant$ psql -U pgadmin -d kurz_prod
Ezzel elérheti a psql terminált:
kurz_prod=#
Használja a \d
parancsot, vagyis az összes táblát, nézetet és sorrendet megjeleníti.
kurz_prod=# \d
Ez kinyomtatja:
List of relations Schema | Name | Type | Owner --------+---------+----------+--------- public | mytable | table | pgadmin public | testing | sequence | pgadmin (2 rows)
Ezután a psql terminálból való kilépéshez írja be a \q
parancsot, és nyomja meg az Enter billentyűt. Vagy Ctrl-D
ugyanezt teszi. Ezek az adatbázisban található táblázatok.
Megjegyzések
- \ d nem csak táblázatokat sorol fel:
\d[S+] list tables, views, and sequences
- Számomra ez a ” helyes ” válasz, mert nem ‘ t megköveteli, hogy már csatlakozzon egy meglévő adatbázishoz.
- Egy bélés szkriptekben való használatra (root-ként):
su - -c 'psql -U postgres postgres -P pager=off -P tuples_only=on -l' postgres | cut -d'|' -f1 | tr -d '[:blank:]' | grep -vE '$^'
Válasz
\l
a . Jó néhány perjelparancs létezik, amelyeket a \?
használatával sorolhat fel psql-ben.
Válasz
Ha további információt szeretne kapni az adatbázisról és a táblázatokról, a következőket teheti:
\l+
az adatbázisok felsorolásához
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)
és
\d+
az aktuális adatbázis jelenlegi keresési_útvonal-sémájának összes táblájának felsorolásához.
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)
Válasz
A pg_Admin alkalmazásból egyszerűen futtathatja a következőket az aktuális adatbázisban, és megkapja az összes táblázatot a megadott sémához:
SELECT * FROM information_schema.tables WHERE table_type = "BASE TABLE" AND table_schema = "public" ORDER BY table_type, table_name
Ez megkapja az összes állandó tábla listája (általában azok a táblák, amelyeket keres). Csak a táblák nevét kaphatja meg, ha a *
helyettesítő karaktert csak a table_name
. A nyilvános table_schema
az alapértelmezett séma a legtöbb adatbázis számára, hacsak az adminisztrátor nem állított be új sémát.
Megjegyzések
- Bár ez igaz, ez egy másik klienst szólít meg mint amire az OP rákérdezett.
- Ez nagyon jól sikerült számomra, és bár a használati esetem nem pontosan az volt, amit az OP kért, ez segített abban, hogy a táblázatlistát elérhessem, miközben csomagológéppel kapcsolódtam ( Julialang-ban LibPQ.jl )
Válasz
Lehetséges, hogy a táblákat beszúrta egy séma, amely nem szerepel a keresési útvonalon, vagy az alapértelmezett, azaz nyilvános, így a táblázatok nem jelennek meg a \ dt használatával. Ha mondjuk adatnak nevezett sémát használ, akkor ezt a futtatással kijavíthatja.
alter database <databasename> set search_path=data, public;
Lépjen ki és adja meg újra a psql fájlt, és most A \ dt a sémaadatokban is megmutatja a táblákat.
Megjegyzések
- Nos, egy egyszerű
set search_path=data, public;
megcsinálná a trükköt is 🙂 - @dezso, ez végleg megváltoztatja a változást, vagy csak abban a psql-munkamenetben?
- Tévedés, nem voltam túl világos. A kijelentkezés-bejelentkezés ciklus helyett szánták.
psql -l
psql --username=postgres -l
.