PostgreSQL: Tabloları PostgreSQL'de göster


Yanıtlar:


2660

Gönderen psqlkomut satırı arayüzü

İlk olarak, veritabanınızı seçin

\c database_name

Ardından, geçerli şemadaki tüm tablolar gösterilir:

\dt

Programlı olarak (veya psqlelbette arayüzden de):

SELECT * FROM pg_catalog.pg_tables;

Sistem tabloları pg_catalogveritabanında yaşar .


102
@StephenCorwin Hayır, MySQL'de \leşdeğerdir show databases. dtshow tablesand lshow databases
user454322

12
\dtçok kullanışlı. Bu pg_catalog.pg_tables, bağlandığınız veritabanı için iç tabloları kullanıcı tarafından oluşturulan tablolarla birlikte göründüğü için çok daha azdır.
aroth

33
psql my_db_name\dtçalışmak için çalıştırılmalıdır . psqlVeritabanı adı olmadan koştuğumda , "İlişki bulunamadı" mesajı aldım
Maksim Dmitriev

31
Sistem tabloları olmadan:SELECT * FROM pg_catalog.pg_tables WHERE schemaname != 'pg_catalog' AND schemaname != 'information_schema'
Matt White

39
Önce \c <DATABASE_NAME>veritabanınızı seçmeniz gerekiyor .
danio

200

Süper kullanıcı olarak giriş yap:

sudo -u postgres psql

Tüm veritabanlarını ve kullanıcıları \lkomutla listeleyebilirsiniz (diğer komutları listeleyerek \?).

Şimdi de kullanıcı / veritabanı değiştirebilir diğer veritabanları görmek istiyorsanız \cgibi komuta \c template1, \c postgres postgresve kullanım \d, \dtveya \dS/ etc tabloları / görünümleri görmek için.


1
Bu daha iyi bir yanıttır, çünkü biri genellikle birden fazla veritabanı yüklü olabilir.
Jerome

Bu çok yardımcı oldu. Teşekkür ederim.
Promise Preston'a

123

(Tamamlamak için)

(SQL standardı) bilgi şemasını da sorgulayabilirsiniz :

SELECT
    table_schema || '.' || table_name
FROM
    information_schema.tables
WHERE
    table_type = 'BASE TABLE'
AND
    table_schema NOT IN ('pg_catalog', 'information_schema');

3
+1 olmasına rağmen, mysql şov tabloları sadece mevcut şemayı gösterir, bu şekilde düşünmek iyidir, mysql sadece bir veritabanına sahiptir, ancak postgresql'nin birden fazla veritabanına (kataloglar) ve şemalara sahip olabileceği birden fazla şema vardır. Yani equiv table_schema = 'DB_NAME' olmalıdır;
Rahly

Tam olarak standart sql değil, "||" mssql üzerinde dizeleri bitiştirmek
ChRoNoN

123

PostgreSQL'de tabloları göstermek için PostgreSQL'in etkileşimli terminal Psql'ini kullanabilirsiniz.

1. Psql'i başlatın

Genellikle psql'ye girmek için aşağıdaki komutu çalıştırabilirsiniz:

psql DBNAME USERNAME

Örneğin, psql template1 postgres

Sahip olabileceğiniz bir durum: kök olarak giriş yaptığınızı ve veritabanı adını hatırlamadığınızı varsayalım. Psql'e ilk girerek şunu girebilirsiniz:

sudo -u postgres psql

Bazı sistemlerde, sudo komutu kullanılamaz, bunun yerine aşağıdaki komutlardan birini çalıştırabilirsiniz:

psql -U postgres
psql --username=postgres

2. Tabloları göster

Şimdi Psql'de aşağıdaki gibi komutları çalıştırabilirsiniz:

  1. \? tüm komutları listele
  2. \l veritabanlarını listele
  3. \conninfo geçerli bağlantı hakkında bilgi görüntüleme
  4. \c [DBNAME] yeni veritabanına bağlanma, ör. \c template1
  5. \dt genel şemanın tablolarını listele
  6. \dt <schema-name>.* belirli şemaların tablolarını listeler, ör. \dt public.*
  7. \dt *.* tüm şemaların tablolarını listele
  8. Daha sonra SQL deyimlerini çalıştırabilirsiniz, örn. SELECT * FROM my_table;(Not: bir deyim noktalı virgülle sonlandırılmalıdır ;)
  9. \q psql'den çık

52
  1. Postgres kullanıcısı olarak ilk giriş:

    sudo su - postgres

  2. gerekli db'ye bağlanın: psql -d databaseName

  3. \dt bağlı olduğunuz veritabanındaki tüm tabloların listesini döndürür.


40

Psql'nin -E bayrağıyla çalıştırılması, \ dt ve benzerlerini uygulamak için dahili olarak kullanılan sorguyu yansıtır:

sudo -u postgres psql -E

postgres=# \dt       
********* QUERY **********
SELECT n.nspname as "Schema",
c.relname as "Name", 
CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as "Type",
pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
    AND n.nspname <> 'pg_catalog'
    AND n.nspname <> 'information_schema'
    AND n.nspname !~ '^pg_toast'
AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;        
**************************

1
BTW, TOAST büyük değerleri saklamak için kullanılır: postgresql.org/docs/8.3/static/storage-toast.html
Dorian

39

Tüm veritabanlarını ve şemalarını kontrol edebilmeniz için bir süper kullanıcı olarak giriş yapın: -

sudo su - postgres

Sonra aşağıdaki komutu kullanarak postgresql kabuk alabilirsiniz: -

psql

Artık aşağıdaki komutu kullanarak tüm veritabanı listesini kontrol edebilirsiniz: -

\l

Veritabanlarının boyutlarını da kontrol etmek istiyorsanız kullanın: -

\l+

qGeri dönmek için tuşuna basın .

Veritabanınızı bulduktan sonra şu komutu kullanarak bu veritabanına bağlanabilirsiniz: -

\c database_name

Bağlandıktan sonra veritabanı tablolarını veya şemasını kontrol edebilirsiniz:

\d

Şimdi kabuk kullanımına geri dönmek için: -

q

Şimdi belirli bir tablo kullanımının ayrıntılarını daha fazla görmek için: -

\d table_name

Postgresql_shell'e geri dönmek için tuşuna basın \q.

Terminal terminaline geri dönmek için exit.


24

Yalnızca oluşturduğunuz tabloların listesini görmek istiyorsanız, yalnızca şunu söyleyebilirsiniz:

\dt

Ancak PATTERN, hangi tabloların gösterileceğini özelleştirmenize de yardımcı olacak. pg_catalogŞema dahil olmak üzere tümünü göstermek için ekleyebilirsiniz *.

\dt *

Yaparsan: \?

\ dt [S +] [PATTERN] liste tabloları


23

sadece tablolara bak

=> \dt

şema tablolarını görmek istiyorsanız

=>\dt+

belirli şema tablolarını görmek istiyorsanız

=>\dt schema_name.* 

Ben güzel sen karıştırıyorsun eminim +ile S. İkincisi (harf) şema tablolarını gösterir. +Sadece ekstra bilgi gösterir.
Garret Wilson

20

Önce aşağıdaki komutu kullanarak Veritabanına bağlanın

\c database_name

Ve bu mesajı göreceksiniz - You are now connected to database database_name. Ve aşağıdaki komutu çalıştırıyorlar

SELECT * FROM table_name;

Veritabanı_adı ve tablo_adı olarak veritabanınız ve tablo adınızla güncelleyin


20
Bunun soruyu cevapladığından emin değilim. Ben onun OP veritabanındaki tüm tabloları bilmek çalışıyor olduğunu düşünüyorum, kendi veritabanındaki belirli bir tablodan tüm satırları almak değil ... değil mi?
sokulur

16

PostgreSQL'de pgAdmin4 kullanıyorsanız, veritabanınızdaki tabloları göstermek için bunu kullanabilirsiniz:

select * from information_schema.tables where table_schema='public';

14

\dtYalnızca , kullandığınız veritabanının genel şemasındaki tabloları listeleyeceğinizi unutmayın . Tablolarımı ayrı şemalarda tutmayı seviyorum, bu yüzden kabul edilen cevap benim için işe yaramadı.

Belirli bir şemadaki tüm tabloları listelemek için aşağıdakileri yapmam gerekiyordu:

1) İstenilen veritabanına bağlanın:

psql mydb

2) Komuttan sonra tablolarını görmek istediğim şema adını belirtin, \dtşöyle:

\dt myschema.*

Bu bana ilgilendiğim sonuçları gösteriyor:

               List of relations
 Schema   |       Name      | Type  |  Owner   
----------+-----------------+-------+----------
 myschema | users           | table | postgres
 myschema | activity        | table | postgres
 myschema | roles           | table | postgres

12
select 
  * 
from 
  pg_catalog.pg_tables 
where 
  schemaname != 'information_schema' 
  and schemaname != 'pg_catalog';

8

\ dt (* gerekli değil) - bağlı olduğunuz mevcut bir veritabanı için tüm tabloları listeler. Ayrıca dikkat edilmesi gereken noktalar:

\ d [tablo_adı] - tür bilgisi, başvurular ve anahtar kısıtlamaları dahil olmak üzere belirli bir tablo için tüm sütunları gösterir.


6

Geçerli veritabanındaki tabloları \dt .

Fwiw, \d tablenameverilen tabloyla ilgili ayrıntıları , MySQL'de olduğu gibi show columns from tablename, ancak biraz daha fazla bilgi ile gösterecektir .


5

Psql : \ dt kullanma

Veya:

SELECT c.relname AS Tables_in FROM pg_catalog.pg_class c
        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE pg_catalog.pg_table_is_visible(c.oid)
        AND c.relkind = 'r'
        AND relname NOT LIKE 'pg_%'
ORDER BY 1

3

Her şeyden önce veritabanı gibi

veritabanım ubuntu

bağlanmak için bu komutu kullan

 \c ubuntu

Bu mesaj gösterilecek

"Artık" ubuntu "veritabanına" postgres "kullanıcısı olarak bağlısınız."

şimdi

İçindeki tüm tabloları göstermek için bu komutu çalıştırın

\d+

3

Komut satırındaki tüm tabloları listelemenin en basit yolu, zevkime göre:

psql -a -U <user> -p <port> -h <server> -c "\dt"

Belirli bir veritabanı için veritabanı adını eklemeniz yeterlidir:

psql -a -U <user> -p <port> -h <server> -c "\dt" <database_name>

Hem Linux hem de Windows üzerinde çalışır.


3

hızlı bir oneliner olarak

# just list all the postgres tables sorted in the terminal
db='my_db_name'
clear;psql -d $db -t -c '\dt'|cut -c 11-|perl -ne 's/^([a-z_0-9]*)( )(.*)/$1/; print'

veya çok daha net json çıkışı çok astarı tercih ederseniz:

IFS='' read -r -d '' sql_code <<"EOF_CODE"
    select array_to_json(array_agg(row_to_json(t))) from (
        SELECT table_catalog,table_schema,table_name 
        FROM information_schema.tables
        ORDER BY table_schema,table_name ) t
EOF_CODE
psql -d postgres -t -q -c "$sql_code"|jq

1

\ dt tabloları listeler ve "\ pset çağrı cihazı kapalı" ayrı bir tabloya geçmeden bunları aynı pencerede gösterir. Bu özelliği dbshell'de ölümüne seviyorum.



0

İlk olarak, bağlamanız gereken veritabanını girin

\c database_name

Ardından, geçerli şemadaki tüm tablolar gösterilir:

\dt

-2

İlk önce mac üzerindeki postgre.app kullanarak veya postico kullanarak postgres veritabanınıza bağlanabilirsiniz. Aşağıdaki komutu çalıştırın:

psql -h localhost -p port_number -d database_name -U user_name -W

sonra şifrenizi girin, bu veritabanınıza erişim vermelidir

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.