2009-08-03 13 views
34

क्या किसी तालिका की संरचना को नई तालिका में कॉपी करने का कोई तरीका है, डेटा के बिना, सभी चाबियाँ और बाधाओं सहित? तुम क्या चाहते करने के लिए अब तक का सबसे आसान तरीका द्वारा -तालिका तालिका को नई तालिका में कॉपी करें

उत्तर

10

pgAdmin पर एक नजर डालें।
तालिका पर राइट-क्लिक करें, स्क्रिप्ट - बनाएं।

+0

मैं केवल phpPgAdmin की पहुंच है; मेरे पास सर्वर नहीं है। –

+0

पर्याप्त मेला। PhpPgAdmin में: तालिका पर नेविगेट करें, निर्यात पर क्लिक करें, "केवल संरचना" का चयन करें और आपकी स्क्रिप्ट – ChssPly76

+0

है मुझे यकीन है कि यह इस इंस्टॉल में एक बग होना चाहिए - यह सही फ्रेम में एक खाली पृष्ठ दिखाता है जब मैं ऐसा करता हूं :/ –

40

ठीक है, निकटतम आप एसक्यूएल के साथ प्राप्त कर सकते हैं:

create table new (
    like old 
    including defaults 
    including constraints 
    including indexes 
); 

लेकिन यह सब कुछ कॉपी नहीं करेंगे। गायब होने वाली सबसे महत्वपूर्ण चीजें विदेशी कुंजी हैं। इसके अलावा - ट्रिगर भी कॉपी नहीं किए जाते हैं। अन्य चीजों के बारे में निश्चित नहीं है।

एक और तरीका है, टेबल संरचना डंप करने के लिए बदल यह डंप में नाम है, और इसे फिर से लोड है:

pg_dump -s -t old databases | sed 's/old/new/g' | psql 

लेकिन सावधान रहना, कि इस तरह के साधारण (उदाहरण के लिए sed भी अन्य स्थानों में नया करने के लिए पुराने बदल जाएगा अगर आपके पास "is_scolded" नामक आपके टेबल कॉलम में है तो यह "is_scnewed" बन जाएगा)।

सवाल वास्तव में नहीं बल्कि यह है: क्यों आप इसे की जरूरत है - क्योंकि विभिन्न प्रयोजनों के लिए, मैं विभिन्न तकनीकों का प्रयोग करेंगे।

+0

नोट: 'constraints' सहित PostgreSQL 8.3 – Ragnar123

+1

पर काम नहीं करता Postgres 9.3 :) – Ganapathy

+7

सर्वश्रेष्ठ उत्तर में एक आकर्षण की तरह काम किया। बस सावधान रहें कि यदि आपके पास "धारावाहिक" मान या अनुक्रम के लिए डिफ़ॉल्ट रूप से कुछ अन्य कॉलम है, तो यह पुरानी तालिका के समान अनुक्रम का उपयोग करेगा! तो यदि आप किसी भी तालिका में सामान डालते हैं, तो यह दोनों के लिए वृद्धि होगी। – sudo

23

एक साधारण स्कीमा कॉपी के लिए इस तरह के खंड का उपयोग करें।

CREATE TABLE new_table_name (like old_table_name including all) 
5

कैसे

के बारे में
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2) 

postgresql.org answer

+1

दुर्भाग्यवश, यह कुंजी, बाधाओं या डिफ़ॉल्ट को सुरक्षित नहीं करता है। – sudo

+1

'WHERE 1 = 2' को व्यक्त करने का एक बेहतर तरीका 'कहां झूठा' होगा या बिल्कुल कोई भी खंड नहीं होगा, बल्कि इसके बजाय 'LIMIT 0' होगा। –

संबंधित मुद्दे