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.