2009-12-10 9 views
21

पर प्रोग्रामेटिक रूप से डीडीएल जेनरेट करें पोस्टग्रेस्क्ल पर प्रोग्रामेटिक रूप से तालिका के डीडीएल कैसे उत्पन्न कर सकता हूं? क्या ऐसा करने के लिए कोई सिस्टम क्वेरी या कमांड है? इस मुद्दे पर गुमराह करने से कोई संकेत नहीं मिला।Postgresql

उत्तर

4

उत्तर pg_dump के लिए स्रोत कोड की जांच करना है और डीडीएल उत्पन्न करने के लिए उपयोग किए जाने वाले स्विच का पालन करना है। कोड के अंदर कहीं भी डीडीएल उत्पन्न करने के लिए उपयोग किए गए मेटाडेटा को पुनर्प्राप्त करने के लिए कई प्रश्न हैं।

18

आप डेटाबेस की सामग्री (दोनों स्कीमा और डेटा) को डंप करने के लिए pg_dump कमांड का उपयोग कर सकते हैं। --schema-only स्विच आपकी तालिका के लिए केवल डीडीएल डंप करेगा।

+0

क्षमा करें, इसे प्रोग्रामेटिक रूप से करने की आवश्यकता है। अधिकांश लोगों को pg_dump स्थापित नहीं होगा या pg_dump के साथ किसी सर्वर तक पहुंच नहीं होगी। – ruipacheco

+6

मैं आपकी टिप्पणी को काफी समझ नहीं पा रहा हूं। PostgreSQL के साथ 'pg_dump' स्थापित है और सभी सर्वरों पर उपलब्ध है। इसका उपयोग करने के लिए कोई विशेष उपयोगकर्ता विशेषाधिकार आवश्यक नहीं है (सामान्य PostgreSQL एक्सेस नियंत्रण उस डेटाबेस पर लागू होता है जिसे आप डंप कर रहे हैं)। यदि आप इसे प्रोग्रामेटिक समाधान के रूप में नहीं मानते हैं, तो आपको उचित उत्तर प्राप्त करने के लिए यह निर्धारित करना होगा कि आप किस प्रोग्रामिंग वातावरण का उपयोग कर रहे हैं। –

3

psql को क्यों खोलना क्यों "प्रोग्रामेटिक रूप से" नहीं होगा? यह पूरी स्कीमा को अच्छी तरह से डंप करेगा।

किसी भी तरह, आप information_schema से डेटा प्रकार (और भी बहुत कुछ) प्राप्त कर सकते हैं (8.4 डॉक्स यहां संदर्भित, लेकिन यह एक नई सुविधा नहीं है):

=# select column_name, data_type from information_schema.columns 
-# where table_name = 'config'; 
    column_name  | data_type 
--------------------+----------- 
id     | integer 
default_printer_id | integer 
master_host_enable | boolean 
(3 rows) 
+0

जैसा कि मैंने उपरोक्त कहा है, मेरे अधिकांश उपयोगकर्ताओं को pg_dump या PostgreSQL सर्वर तक पहुंच नहीं होगी और इसलिए मुझे pg_dump के व्यवहार को पुन: पेश करना होगा। – ruipacheco

+0

दाएं। तो * आपका कोड * सूचना स्कीमा (या psql के लिए गोले) से पूछताछ करता है, परिणामों को पार करता है, और परिणाम आपके उपयोगकर्ताओं को दिखाता है। –

2

यहाँ कैसे प्राप्त करने के लिए पर एक अच्छा लेख है सूचना स्कीमा से मेटा जानकारी, http://www.alberton.info/postgresql_meta_info.html

+1

यह आलेख उपयोगी हो सकता है, लेकिन आपको प्रासंगिक बिट्स यहां पोस्ट करनी चाहिए; लिंक अक्सर मर जाते हैं। –

23

pg_dump यह इस आदेश द्वारा किया जा सकता का उपयोग करना:

pg_dump -U user_name -h host database -s -t table_or_view_names -f table_or_view_names.sql 

विवरण:

-s or --schema-only : Dump only ddl/the object definitions (schema), without data. 
-t or --table Dump : Dump only tables (or views or sequences) matching table 

क्षमा करता है, तो विषय से बाहर। बस "psql dump ddl" googling और इस धागे पर रीडायरेक्ट करने में मदद करना चाहते हैं।

0

saved 4 functionspg_dump -s आंशिक रूप से व्यवहार करने के लिए। \d+ मेटाकॉमैंड के आधार पर। उपयोग समान रूप से smth होगा:

\pset format unaligned 
select get_ddl_t(schemaname,tablename) as "--" from pg_tables where tableowner <> 'postgres'; 

बेशक आपको पहले कार्यों को बनाना होगा।

Working sample here at rextester