Postgresql information_schema içindeki tüm tabloları listele


205

PostgreSQL'in information_schema içindeki tüm tabloları listelemenin en iyi yolu nedir?

Açıklığa kavuşturmak için: Boş bir DB ile çalışıyorum (kendi tablolarımı hiç eklemedim), ancak her tabloyu information_schema yapısında görmek istiyorum.

Yanıtlar:


281

select * from information_schema.tablesBelirli bir veritabanı için Postgres tarafından yönetilen her tablonun bir listesini almak için çalışabilmeniz gerekir.

Ayrıca where table_schema = 'information_schema'yalnızca bilgi şemasındaki tabloları görmek için a ekleyebilirsiniz .


4
Teşekkürler, ben sadece denedim: / dt (yıldız). (Yıldız) bu farklı mı?
littleK

/ Dt (asterisk). (Asterisk) şey hakkında hiçbir şey bilmiyorum, üzgünüm. Ben sadece postgres seçme sorgusu koştu ve içindeki tüm tablolar hakkında bilgi listeledi. Select deyimini çalıştırmayı deneyin (boş db'nizde) ve ne döndürdüğüne bakın.
RodeoClown

Yukarıdaki komutu denemek, bilgi tablolarında aşağıdaki tabloları listeler: sql_features, sql_implementation_info, sql_languages, sql_packages, sql_parts, sql_sizing, sql_sizing_profiles ..... Peki bu tablolar ve information_schema.tables içindeki tablolar arasındaki fark nedir?
littleK

2
Listelediğiniz tüm tablolar (/ dt komutu aracılığıyla) veritabanı hakkında meta bilgi sağlar. Listelenen tabloların her biri farklı bilgiler gösterir. Örneğin, information_schema.tables tablosu veritabanındaki tüm tabloları ve özniteliklerini listeler (tablo veya görünüm olup olmadığını, adın ne olduğunu ve bunun gibi diğer bilgileri görebilme gibi). Information_schema.sql_features tablosu, veritabanında hangi özelliklerin etkinleştirildiğini gösterecektir (böylece doğrudan SQL'in yanı sıra veritabanımda Gömülü C'nin desteklendiğini görebiliyorum).
RodeoClown

1
Dt komutu tarafından listelenen tabloların her birinde bir select * çalıştırabilirsiniz - size veritabanında meta veri içeren tabloların bir listesini gösterir.
RodeoClown

114

Tablolarınızı listelemek için şunları kullanın:

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

Yalnızca oluşturduğunuz tabloları listeler.


Oluşturmadığınız ancak erişim izniniz olan tablolara ne dersiniz?
huy

4
Bu yalnızca genel şemadaki tabloları gösterir. Diğer şemalarda tablolar oluşturabilirsiniz.
Joe Van Dyk

Ayrıca bu tablolar ve görünümler arasında ayrım yapmaz.
jayarjo

44
\dt information_schema.

psql içinden, iyi olmalı.


14

"\ Z" KOMUTANLIĞI da liste tabloları zaman interaktif psql'in oturum içinde iyi bir yoldur.

Örneğin.

# psql -d mcdb -U admin -p 5555
mcdb=# /z
                           Access privileges for database "mcdb"
 Schema |              Name              |   Type   |           Access privileges
--------+--------------------------------+----------+---------------------------------------
 public | activities                     | table    |
 public | activities_id_seq              | sequence |
 public | activities_users_mapping       | table    |
[..]
 public | v_schedules_2                  | view     | {admin=arwdxt/admin,viewuser=r/admin}
 public | v_systems                      | view     |
 public | vapp_backups                   | table    |
 public | vm_client                      | table    |
 public | vm_datastore                   | table    |
 public | vmentity_hle_map               | table    |
(148 rows)

1
Bu, genel dışındaki şemalardaki tabloları listelemez .
Kenny Evitt

10

Ayrıca kullanabilirsiniz

select * from pg_tables where schemaname = 'information_schema'

Generall pg * tablolarında (elbette tablolara erişiminiz varsa) izinlerinizle sınırlı olmayan, db içindeki her şeyi görmenizi sağlar.


9

'xxx'Postgresql'deki özel şema için:

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

Olmadan table_type = 'BASE TABLE'tabloları ve görünümleri listeleyeceksiniz


8

1. information_schema.tables adresindeki tüm tabloları ve görünümleri alın, information_schema ve pg_catalog tablolarını ekleyin.

select * from information_schema.tables

2. tabloları ve görünümleri belirli şemaya aittir

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog')

3. sadece tabloları alın (neredeyse \ dt)

select * from information_schema.tables
    where table_schema not in ('information_schema', 'pg_catalog') and
    table_type = 'BASE TABLE'

Table_type öğesine göre filtrelemezseniz, tablolar ve görünümler gibi her tür nesneye karışırsınız.
russellhoff

Tam olarak where table_schema not in ('information_schema', 'pg_catalog')ne için?
jayarjo

1

Hızlı ve kirli bir satırlık sorgu istiyorsanız:

select * from information_schema.tables

Psql'yi açmak zorunda kalmadan doğrudan Sorgu aracında çalıştırabilirsiniz.

(Diğer yayınlar güzel daha spesifik information_schema sorguları önermek ama bir newby olarak, bu tek satırlı sorgu tablo ile kavramak için yardımcı olur buluyorum)

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.