PostgreSQL'deki sütun türünü bilmem gerekiyor (ör. varchar(20)
). Bunu muhtemelen psql'de \d
bir şey kullanarak bulabileceğimi biliyorum, ancak bir seçme sorgusuyla yapılması gerekiyor.
PostgreSQL'de bu mümkün mü?PostgreSQL'de bir tablonun şema ayrıntılarını sorgula?
cevap
Tamamen aşağıdaki sorgu ile postgres kullanarak bir tablo tanımlayabilir:
SELECT
a.attname as Column,
pg_catalog.format_type(a.atttypid, a.atttypmod) as Datatype
FROM
pg_catalog.pg_attribute a
WHERE
a.attnum > 0
AND NOT a.attisdropped
AND a.attrelid = (
SELECT c.oid
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~ '^(TABLENAME)$'
AND pg_catalog.pg_table_is_visible(c.oid)
)
bu Tith sütun adları ve veri türü alacaktır.
O -E
seçenekle
$ psql -E
Sonra basit \d mytable
irade çıktı üretmesi tablosunu tanımlamak için Postgres'e tarafından kullanılan sorguları kullanarak psql'in istemcisi başlatmak da mümkündür. Her psql komutları için çalışır.
Evet, information_schema'a bakın.
bir sütun türünü almak için PostgreSQL bir daha basit yolu yoktur.
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
Tabiki tablonun en az bir satırı olmalı. Ve sadece temel türünü tür değiştiriciler (varsa) olmadan elde edersiniz. Buna ihtiyacınız varsa aşağıdaki alternatifi kullanın.
Fonksiyonu sabitler için de kullanabilirsiniz. manual on pg_typeof()
.
SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified
AND NOT attisdropped
AND attnum > 0
ORDER BY attnum;
manuel format_type()
ve object identifier typesregclass
gibi tarih: sütunların tam listesini ve kendi türü sırayla almak için Sistem kataloğu pg_attribute
sorgulamak kullanabilirsiniz tablo boş (veya herhangi biri) için
"format_type (atttypid, atttypmod)" ifadesini bir süre daha görebilirsiniz, çünkü bu bilgiler information_schema.columns ile aynı gibi görünüyor. udt_name (ya da benzer ve bu benim durumum için mükemmel tamam). Teşekkür ederim :). – Dolfa
- 1. Engellemeden bir PHP semafor sorgula?
- 2. C++ atomic_flag durumu sorgula
- 3. Bir XML şema belgesini bir SQL Server'ın tablonun sütununa XML veri türü
- 4. SQLAlchemy: tablo alanına göre özel özelliği sorgula
- 5. Adında boşluk bulunan bir tabloyu sorgula
- 6. Tablo ayrıntılarını almak için
- 7. Bir tablonun satırlarına ekleme
- 8. Şema,
- 9. Sorgula Temp Tablosuna Veri Ekleme
- 10. İki ilgili tabloyu sorgula (Katıl)
- 11. Android'de bir kişinin tüm ayrıntılarını nasıl alırım?
- 12. Konsolda TFS değişiklik ayrıntılarını görüntüle
- 13. ActionBar Ayrıntılarını Ayrı Olarak Ayarlayın
- 14. jquery - bir tablonun kuşak satırı?
- 15. Veritabanındaki bir tablonun sahipliğini değiştirme
- 16. PHP'de bir tablonun toplamını ekleme
- 17. Bir tablonun SQL sütunlarını gruplama
- 18. Tablonun içine bir yönerge yerleştirme
- 19. Mevcut bir ad alanına sahip Oracle'da bir XML tablosu sorgula
- 20. Tridion'daki şema nesnesinden şema adı nasıl alınır?
- 21. Şema tuşu benzersiz şema anahtarı ile benzersiz
- 22. SIM durumunu durumdan USSD sorgula kontrol et
- 23. db4o sorgula ilgili sorgu için örnek prototip
- 24. Sqlite RawQuery ile Sorguyu Android'de Sorgula
- 25. Bir tablonun bir sütununu ölçekleme değerine güncelleştirme
- 26. Gelincik şema
- 27. Dizi sütunu bir veya daha fazla değer içeriyorsa sorgula
- 28. İçindekiler bir liste içinde yer alan belgeler için MongoDB'yi sorgula
- 29. İmleci tablonun dışına taşı
- 30. Mevcut tablonun değişen dolgusu
Mükemmel cevap! Yine de başka bir soruna rastladım: http://stackoverflow.com/questions/4336465/using-query-to-set-the-column-type-in-postgresql – David
Bu regex eşleşmesine ihtiyacınız olduğunu düşünmüyorum, ' c.relname ~ '^ (TABLENAME) $' ',' c.relname = 'TABLENAME' öğesine eşdeğerdir. Yine de güzel cevap. –
@mu Haklısınız, ama bunu regex desteği ile bir şeyden kopyalayıp yapıştırdığımı düşünüyorum :) –