सवाल क्या पोस्टग्रेज़ में तालिका बनाने के लिए एक MySQL समतुल्य है?


क्या कोई MySQL समकक्ष है SHOW CREATE TABLE पोस्टग्रेज़ में? क्या यह संभव है? यदि नहीं तो अगला सबसे अच्छा समाधान क्या है?

मुझे कथन की आवश्यकता है क्योंकि मैं इसे रिमोट सर्वर (डब्ल्यूसीएफ पर) पर टेबल बनाने के लिए उपयोग करता हूं।


47
2018-02-06 21:49


मूल




जवाब:


आप PostgreSQL लॉग फ़ाइल में पता लगाने का प्रयास कर सकते हैं कि "pg_dump -t table -s" वास्तव में क्या करता है। फिर आप अपना स्वयं का एसक्यूएल फ़ंक्शन लिखने के लिए उसी विधि का उपयोग कर सकते हैं।


21
2018-02-06 23:29



ठीक है, मैंने pg_dump का पता लगाया। लेकिन यह इतना आसान नहीं था, क्योंकि मुझे तालिका तालिका विवरण लिखने के लिए सी # में अपना स्वयं का फ़ंक्शन लिखना पड़ा। लेकिन यह एक बड़ी मदद थी, इसलिए आपको बहुत ज्यादा धन्यवाद। : डी - vlebar


pg_dump:

pg_dump -st tablename dbname

या PostgreSQL जीयूआई उपकरण का उपयोग करें (pgAdmin, phpPgAdmin, आदि)


25
2018-02-06 21:52



मैं समस्या को और विस्तार से समझाने की कोशिश करूंगा। मुझे एसक्यूएल स्टेटमेंट (चयन या संग्रहीत प्रक्रिया) की आवश्यकता है क्योंकि मैं सी # (एनजीपीएसक्लॉम कॉमांड) में एसक्यूएल कमांड निष्पादित करता हूं। तो मुझे लगता है कि इस मामले में pg_dump समाधान नहीं है। :( - vlebar
क्यों नहीं? --schema-only इसका सटीक उद्देश्य है: स्कीमा / टेबल बनाने के लिए SQL कथन दिखाएं। आप इस आउटपुट को अपने सी # प्रोग्राम में किसी भी तरह से खिला सकते हैं। - Sven♦
info_schema विचारों को देखें: postgresql.org/docs/9.0/interactive/information-schema.html - alvosu
@SvenW: अगर मैं टेबल का ज्ञात सेट लेता तो मैं ऐसा करूँगा। समस्या यह है कि यदि उपयोगकर्ता चुनता है, तो चयनित डेटाबेस में किसी भी तालिका को सिंक कर सकता है और फिर एक wcf सेवा के पीछे रिमोट सर्वर पर चयनित तालिका बना सकता है। मैं mssql के साथ ऐसा कर सकता हूं और अब मैं क्लाइंट प्रोग्राम को अन्य एसक्यूएल सर्वर (mysql, oracle, postgresql, ...) में विस्तारित करना चाहता हूं ठीक है, मैं उस तालिका के लिए pg_dump कर सकता हूं जिसे उपयोगकर्ता सिंक करना चाहता है, लेकिन यदि यह है बस इतना करना संभव है कि plsql में, मैं इसे plsql में करना चाहता हूं - vlebar
अगर डंपिंग .tar, पकड़ो restore.sql संग्रह से फ़ाइल। इसमें सभी निर्माण बयान हैं। - Joseph Lust


कमांड लाइन में (psql) तुम दौड़ सकते हो: \d <table name> सभी कॉलम, उनके प्रकार और अनुक्रमणिका सूचीबद्ध करने के लिए।


9
2017-09-25 18:58



यह सहायक है, लेकिन सवाल का जवाब नहीं देता है। - Ryan Tuck


मुझे एहसास है कि मैं इस पार्टी के लिए थोड़ा देर हो चुकी हूं, लेकिन यह मेरी Google खोज का पहला परिणाम था, इसलिए मुझे लगा कि मैं इसके साथ क्या जवाब दूंगा।

कॉलम प्राप्त करने के लिए आप इस क्वेरी के साथ समाधान की ओर बहुत दूर हो सकते हैं:

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

और फिर सबसे आम अनुक्रमणिका के लिए यह क्वेरी:

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

फिर यह सही प्रारूप में क्वेरी स्ट्रिंग (ओं) को बनाने का मामला है।


4
2018-05-23 02:43





जैसा कि उत्तर दिया गया है https://serverfault.com/a/875414/333439, उसके साथ \d <table> मेटा-कमांड में psql डेटाबेस में टेबल संरचना दिखाने के लिए संभव है। यदि आप मेटा-कमांड में उपयोग की गई क्वेरी देखना चाहते हैं, तो आप कमांड का उपयोग कर सकते हैं psql -E। जैसा कि मैनपेज में वर्णित है, -E स्विच echoes \d मेटा-कमांड क्वेरीज। तो, आप लॉन्च कर सकते हैं psql -E, आप तालिका संरचना को देख सकते हैं \d <table> मेटा-कमांड, और, के अनुसार -E स्विच करें, आप तालिका संरचना का वर्णन करने के लिए उत्पन्न क्वेरी देख सकते हैं


2
2017-07-31 10:28





@ क्यूबिकल सॉफ्ट के उत्तर के पहले भाग पर बिल्डिंग आप निम्न फ़ंक्शन में ड्रॉप कर सकते हैं जो सरल तालिकाओं के लिए काम करना चाहिए (डिफ़ॉल्ट 'सार्वजनिक' स्कीमा 'मानता है और बाधाओं, अनुक्रमणिका और उपयोगकर्ता परिभाषित डेटा प्रकार इत्यादि को छोड़ देता है)। @ आरजेएस उत्तर इस समय ठीक से करने का एकमात्र तरीका है; यह ऐसा कुछ है जिसे psql में बनाया जाना चाहिए!

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;

1
2017-09-04 07:29