Postgresql'de belirli bir sütuna sahip bir tablo nasıl bulunur


Yanıtlar:


67

sistem kataloglarını sorgulayabilirsiniz :

select c.relname
from pg_class as c
    inner join pg_attribute as a on a.attrelid = c.oid
where a.attname = <column name> and c.relkind = 'r'

sql fiddle demo


1
Ravi'nin cevabındaki sorgu kabul ederken, bu sorgunun '%' joker karakterlerini kabul etmediğini unutmayın.
Skippy le Grand Gourou

@SkippyleGrandGourou "id% gibi" kabul ediyor
jutky

bu benim için joker karakterli veya joker karaktersiz çalışmadı, aramak için information.schema kullanmak zorunda kaldım
Lrawls

155

Sen de yapabilirsin

 select table_name from information_schema.columns where column_name = 'your_column_name'

1
Garip bir şekilde, bu sorgunun @ RomanPekar sorgusunun göstermediği tablolar gösterdiğini gördüm; Bunun neden olacağını merak ediyorum
Ken Bellows

1
@KenBellows Sanırım pg_class / pg_attirbute, ANSI belirtiminde information_schema tanımlanırken Postgresql'in yeni sürümleriyle değişebilir. Genel sorgular için bu cevabın daha iyi olduğunu söyleyebilirim. Bazen örneğin nesne kimliğine ihtiyacım var, bu durumda db motoruna özel tablolar kullanmam gerekiyor. Ayrıca, bilgi şeması görünümleri her zaman db motora özgü tablolara göre ek bir adımdır ve bazen (biraz) daha kötü bir performansa yol açabilir
Roman Pekar

Bu, sunulan iki çözümden daha doğruydu - benim durumumda. Pg_class sorgusu iki (150) tabloyu kaçırdı. Information_schema sorgusu tüm tabloları yakaladı. Neden iki tablonun birleşim dışında kaldığını görmek için etrafı araştırmam gerekecek. Her durumda bilgi için teşekkürler!
Thomas Altfather Good

7

@Roman Pekar sorgusunu temel olarak kullandım ve şema adını ekledim (benim durumumla alakalı)

select n.nspname as schema ,c.relname
    from pg_class as c
    inner join pg_attribute as a on a.attrelid = c.oid
    inner join pg_namespace as n on c.relnamespace = n.oid
where a.attname = 'id_number' and c.relkind = 'r'

sql fiddle demo


1

Basitçe:

$ psql mydatabase -c '\d *' | grep -B10 'mycolname'

Gerekirse tablo adını almak için -B ofsetini büyüt


1

Joker Karakter Desteği Bulmak istediğiniz dizeyi içeren tablo şemasını ve tablo adını bulun.

select t.table_schema,
       t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name
                                and c.table_schema = t.table_schema
where c.column_name like '%STRING%'
      and t.table_schema not in ('information_schema', 'pg_catalog')
      and t.table_type = 'BASE TABLE'
order by t.table_schema;

0
select t.table_schema,
       t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name 
                                and c.table_schema = t.table_schema
where c.column_name = 'name_colum'
      and t.table_schema not in ('information_schema', 'pg_catalog')
      and t.table_type = 'BASE TABLE'
order by t.table_schema;

3
Lütfen yanıtınızı kodunuz için bir açıklama içerecek şekilde düzenleyin . Soru altı yıldan daha eski ve iyi oylanmış, iyi açıklanmış birkaç cevaba ek olarak zaten kabul edilmiş bir cevabı var. Cevabınızda böyle bir açıklama olmazsa, olumsuz oy verilecek veya kaldırılacaktır. Bu ekstra bilgiyi eklemek, cevabınızın burada devam eden varlığını haklı çıkarmaya yardımcı olacaktır.
Das_Geek
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.