SHOW CREATE TABLE
Postgres'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.
SHOW CREATE TABLE
Postgres'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.
Yanıtlar:
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.
pg_dump:
pg_dump -st tablename dbname
veya PostgreSQL GUI Tools (pgAdmin, phpPgAdmin, vb.) kullanın.
--schema-only
kesin bir amacı var: Şema / tabloyu oluşturmak için SQL ifadelerini göster. Bu çıktıyı bir şekilde C # programınıza aktarabilirsiniz.
.tar
, restore.sql
dosyayı arşivden alın. Tüm create ifadelerine sahiptir.
Komut satırında ( psql
) çalıştırabilirsiniz: \d <table name>
tüm sütunları, türlerini ve dizinlerini listelemek için.
@ 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 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.
Https://serverfault.com/a/875414/333439 adresinde cevaplandığı gibi , \d <table>
meta-komut psql
ile 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, -E
anahtar \d
meta 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 -E
tablo yapısını tanımlamak için oluşturulan sorguyu görüntüleyebilirsiniz.
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 TABLE
Seçilen tablo için.
Postgres uzantısı ddlx ( https://github.com/lacanoid/pgddl ) tam olarak bu ve daha fazlasını yapar.