Tüm tablo adlarını listelemek için PostgreSQL sorgusu?


184

Benim Postgres DB tüm tabloları listelemek için kullanılabilir herhangi bir sorgu var mı.

Gibi bir sorgu denedim:

SELECT table_name FROM information_schema.tables
                      WHERE table_schema='public' 

Ancak bu sorgu görünümleri de döndürür.

Görünümleri değil, yalnızca tablo adlarını nasıl alabilirim?

Yanıtlar:


307

Bu sorguda ne var ( kılavuzdaki açıklamaya dayanarak )?

SELECT table_name
  FROM information_schema.tables
 WHERE table_schema='public'
   AND table_type='BASE TABLE';

4
buradaki en iyi cevap bu.
Tommy

3
Tablo türü nedir?
Bryan Bryce

kılavuzdan table_type: Tablonun türü: Kalıcı bir taban tablo için normal tablo (normal tablo tipi), bir görünüm için GÖRÜNÜM, yabancı bir tablo için YABANCI veya geçici bir tablo için YEREL GEÇİCİ
tzachs

38

Veritabanı listesi istiyorsanız

SELECT datname FROM pg_database WHERE datistemplate = false;

Tüm veritabanlarının geçerli pg kurulumundan tabloların listesini istiyorsanız

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

En azından Postgres 9.5'te bu doğru değil. Bir kümede 3 veritabanı var ve bu sadece geçerli veritabanından tabloları döndürüyor.
sudo

Belgeler yalnızca geçerli olanı söylüyor: postgresql.org/docs/9.5/static/infoschema-tables.html "table_catalog sql_identifier Tabloyu içeren veritabanının adı (her zaman geçerli veritabanı)"
sudo

28

Postgres terminalini istediğiniz veri tabanıyla açın:

psql dbname (run this line in a terminal)

sonra bu komutu postgres ortamında çalıştırın

\d

Bu, tüm tabloları ada göre açıklayacaktır. Temelde artan ada göre tabloların bir listesi.

Ardından, tabloları alanlara göre tanımlamak için bunu deneyebilirsiniz:

\d tablename.

Bu yardımcı olur umarım.


@wingedpanther nasıl yapılır? sadece tüm tabloları \dlisteleme seçeneği vardır, indeks, seq, ...?
Peter Krauss

5
Bunun \dtiçin yok mu?
thoroc

11

Bunu dene:

SELECT table_name 
FROM information_schema.tables 
WHERE table_schema='public' AND table_type='BASE TABLE'

bu işe yarıyor!


İhtiyacımız olduğunu düşünmüyorum table_type='BASE TABLE'. Belki yanılıyorum, lütfen biraz açıklayabilir misiniz?
15'te abriggs

bazen geçerli bağlı DB ekleme filtrelemek yararlıdır: ve table_catalog = current_database ()
Diego Scaravaggi

8
select 
 relname as table 
from 
 pg_stat_user_tables 
where schemaname = 'public'

select 
  tablename as table 
from 
  pg_tables  
where schemaname = 'public'

1
pg_stat_user_tableseğer doldurulması olmayabilir track_activitiesdevre dışıdır. Gibi "resmi" API kullanarak pg_tablesveya information_schema.tablebir olduğunu çok daha iyi bir seçim.
a_horse_with_no_name


0
SELECT table_name
FROM information_schema.tables
WHERE table_type='BASE TABLE'
AND table_schema='public';

MySQL için table_schema = 'dbName' gerekir ve MSSQL için bu koşulu kaldırır.

"Yalnızca geçerli kullanıcının erişebildiği tablo ve görünümlerin gösterildiğine" dikkat edin. Ayrıca, birçok veritabanına erişiminiz varsa ve sonucu belirli bir veritabanıyla sınırlandırmak istiyorsanız, bunu koşul VE table_catalog = 'yourDatabase' (PostgreSQL'de) ekleyerek başarabilirsiniz.

Satır adlarını gösteren üstbilgiden ve satır sayısını gösteren altbilgiden de kurtulmak isterseniz, psql'yi -t (yalnızca - kısaltmalar için) komut satırı seçeneği ile başlatabilir veya psql öğelerinde ayarı değiştirebilirsiniz. komut satırını \ t (\ pset tuples_only kısaltması). Bu, örneğin \ g [| command] ile başka bir komuta çıktı verirken faydalı olabilir.

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.