क्या पोस्टग्रेज्स में SHOW CREATE TABLE के बराबर MySQL है?


66

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

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


और मुझे लगा कि MySQL डेटाबेस को सभी शांत विशेषताओं को याद कर रहा है ...
क्रिस्टोफर के।

जवाबों:


27

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


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

उस मुसीबत में जाने की कोई ज़रूरत नहीं है - यहाँ के अनुसार आप यह -Eपता लगाने के लिए विकल्प का उपयोग कर सकते हैं कि पृष्ठभूमि में क्या चल रहा है जब आप एक psqlकमांड चलाते हैं - -E: will describe the underlaying queries of the \ commands (cool for learning!)- HTH!
Vérace

40

pg_dump:

pg_dump -st tablename dbname

या PostgreSQL GUI टूल्स (pgAdmin, phpPgAdmin, आदि) का उपयोग करें।


मैं समस्या को और अधिक विस्तार से समझाने की कोशिश करूँगा। मुझे sql स्टेटमेंट (चुनिंदा या संग्रहित प्रक्रिया) की आवश्यकता है क्योंकि मैं C # (NpgsqlCommand) में sql कमांड निष्पादित करता हूं। इसलिए मुझे लगता है कि इस मामले में pg_dump समाधान नहीं है। :(
vlebar

1
क्यों नहीं? --schema-onlyइसका सटीक उद्देश्य है: स्कीमा / टेबल बनाने के लिए SQL स्टेटमेंट दिखाएं। आप इस आउटपुट को किसी भी तरह अपने C # प्रोग्राम में फीड कर सकते हैं।
स्वेन


1
@SvenW: अगर मैं तालिकाओं का एक ज्ञात सेट होता तो मैं ऐसा करता। समस्या यह है कि उपयोगकर्ता कर सकता है, यदि वह चुनता है, चयनित डेटाबेस में किसी भी तालिका को सिंक करता है और फिर एक wcf सेवा के पीछे एक दूरस्थ सर्वर पर चयनित तालिका बनाता है। मैं mssql के साथ ऐसा कर सकता हूं और अब मैं क्लाइंट प्रोग्राम को अन्य sql सर्वरों (mysql, oracle, postgresql, ...) तक विस्तारित करना चाहता हूं, ठीक है, मैं एक टेबल के लिए pg_dump कर सकता हूं जिसे उपयोगकर्ता सिंक करना चाहता है, लेकिन अगर यह है सभी संभव है कि बस plsql में, मैं इसे plsql में करना चाहता हूं
vlebar

1
यदि डंपिंग हो रही है .tar, restore.sqlतो संग्रह से फ़ाइल को पकड़ो । इसमें तमाम बयान दिए गए हैं।
जोसेफ लस्ट


4

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

यह होना चाहिए स्वीकार किए जाते हैं जवाब
exebook

इसके लिए शुक्रिया!
फ्रैंक

3

मुझे लगता है कि मुझे इस पार्टी में थोड़ी देर हो गई है, लेकिन यह मेरी 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

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


2

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


0

में pgAdmin 4 , बस छोड़ दिया, जैसे पर पेड़ में तालिका मिलेगी:

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

जब तालिका का चयन किया जाता है, तो दाईं ओर SQL टैब खोलें । यह CREATE TABLEचयनित तालिका के लिए प्रदर्शित होता है ।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.