Postgres'te MySQL eşdeğeri SHOW CREATE TABLE var mı?


66

SHOW CREATE TABLEPostgres'te MySQL eşdeğeri var mı ? Mümkün mü? Değilse bir sonraki en iyi çözüm nedir?

İfadeye ihtiyacım var çünkü tabloyu uzak bir sunucuda (WCF üzerinden) oluşturmak için kullanıyorum.


Ve MySQL'in tüm harika özelliklerin eksik olduğu bir veritabanı olduğunu sanıyordum ...
Christopher K.

Yanıtlar:


27

PostgreSQL günlük dosyasında "pg_dump -t table -s" gerçekte ne yaptığını izlemeye çalışabilirsiniz. Sonra kendi sql işlevinizi yazmak için aynı yöntemi kullanabilirsiniz.


tamam, pg_dump’un izini sürdüm. Ama o kadar kolay değildi, çünkü kendi tablomu C # 'da kendi tablosu yazmalıyım. Ama bu büyük bir yardımdı, bu yüzden size çok teşekkür ederim. : D
vlebar

Tüm bu sıkıntılara gerek yok - buraya göre -Ebir psqlkomut çalıştırdığınızda arka planda neler olup bittiğini izlemek için seçeneği kullanabilirsiniz - -E: will describe the underlaying queries of the \ commands (cool for learning!)- HTH!
Vérace

40

pg_dump:

pg_dump -st tablename dbname

veya PostgreSQL GUI Tools (pgAdmin, phpPgAdmin, vb.) kullanın.


sorunu daha ayrıntılı olarak açıklamaya çalışacağım. Sql deyimine (seçim veya saklı yordam) ihtiyacım var çünkü sql komutunu C # (NpgsqlCommand) komutunda çalıştırıyorum. Bu yüzden pg_dump bu durumda çözüm değil. :(
vlebar

1
Neden olmasın? --schema-onlykesin bir amacı var: Şema / tabloyu oluşturmak için SQL ifadelerini göster. Bu çıktıyı bir şekilde C # programınıza aktarabilirsiniz.
Sven

information_schema görünümlerine bakın: postgresql.org/docs/9.0/interactive/information-schema.html
alvosu

1
@SvenW: Bilinen bir masa setim olsaydı bunu yapardım. Sorun, kullanıcının seçtiği takdirde, seçilen veritabanındaki herhangi bir tabloyu senkronize edip ardından seçilen tabloyu bir wcf hizmetinin arkasındaki uzak bir sunucuda oluşturabilmesidir. Bunu mssql ile yapabilirim ve şimdi istemci programını diğer sql sunucularına (mysql, oracle, postgresql, ...) genişletmek istiyorum. Tamam, kullanıcının senkronize etmek istediği bir tablo için pg_dump yapabilirim, eğer öyleyse bunu sadece
plsql'de

1
Dumping ise .tar, restore.sqldosyayı arşivden alın. Tüm create ifadelerine sahiptir.
Joseph Lust

15

Komut satırında ( psql) çalıştırabilirsiniz: \d <table name>tüm sütunları, türlerini ve dizinlerini listelemek için.


5
Bu yardımcı olur, ancak soruyu yanıtlamaz.
Ryan Tuck

4

@ CubicalSoft'un cevabının ilk kısmına dayanarak, basit tablolar için çalışması gereken (varsayılan 'genel' şema 'kabul eder ve kısıtlamaları, indeksleri ve kullanıcı tanımlı veri türlerini vb. Atlar) aşağıdaki işlevi kullanabilirsiniz. @ RJS cevabı şu anda düzgün yapmak için tek yoldur; Bu psql içine inşa edilmesi gereken bir şey!

CREATE OR REPLACE FUNCTION show_create_table(table_name text, join_char text = E'\n' ) 
  RETURNS text AS 
$BODY$
SELECT 'CREATE TABLE ' || $1 || ' (' || $2 || '' || 
    string_agg(column_list.column_expr, ', ' || $2 || '') || 
    '' || $2 || ');'
FROM (
  SELECT '    ' || column_name || ' ' || data_type || 
       coalesce('(' || character_maximum_length || ')', '') || 
       case when is_nullable = 'YES' then '' else ' NOT NULL' end as column_expr
  FROM information_schema.columns
  WHERE table_schema = 'public' AND table_name = $1
  ORDER BY ordinal_position) column_list;
$BODY$
  LANGUAGE SQL STABLE;

Bu kabul edilen cevap olmalıdır
exebook

Bunun için teşekkür ederim!
Frank

3

Bu partiye biraz geç kaldığımı fark ettim, ancak bu, Google Arama’nın ilk sonucuydu, bu yüzden ne bulduğumu cevaplayacağımı düşündüm.

Sütunları almak için bu sorguda bir çözüme doğru oldukça ileri gidebilirsiniz:

SELECT *
FROM information_schema.columns
WHERE table_schema = 'YOURSCHEMA' AND table_name = 'YOURTABLE'
ORDER BY ordinal_position;

Ve sonra en yaygın dizinler için bu sorgu:

SELECT c.oid, c.relname, a.attname, a.attnum, i.indisprimary, i.indisunique
FROM pg_index AS i, pg_class AS c, pg_attribute AS a
WHERE i.indexrelid = c.oid AND i.indexrelid = a.attrelid AND i.indrelid = 'YOURSCHEMA.YOURTABLE'::regclass
ORDER BY" => "c.oid, a.attnum

O zaman sorgu dizgesini / dizilerini doğru biçimde oluşturmaktan ibarettir.


2

Https://serverfault.com/a/875414/333439 adresinde cevaplandığı gibi , \d <table>meta-komut psqlile veritabanındaki tablo yapısını göstermek mümkündür. Meta-komutta kullanılan sorguyu görüntülemek isterseniz, komutu kullanabilirsiniz psql -E. Man sayfasında açıklandığı gibi, -Eanahtar \dmeta komut sorgularını tekrarlar. Böylece, başlatabilir psql -E, tablo yapısını \d <table>meta-komut ile görüntüleyebilir ve değişime göre -Etablo yapısını tanımlamak için oluşturulan sorguyu görüntüleyebilirsiniz.


0

In pgAdmin 4 , sadece solda, örneğin üzerine ağacında tabloyu bulun:

Servers
+ PostgreSQL 11
  + Databases
    + MYDATABASENAME
      + Schemas
        + public
          + Tables
            + MYTABLENAME  <-- click this tree element

Tablo seçildiğinde, sağdaki SQL sekmesini açın . Bu görüntüler CREATE TABLESeçilen tablo için.


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.