2013-01-23 40 views
47

मेरा कंप्यूटर टूट गया लेकिन सौभाग्य से मैंने फ़ोल्डर सी: \ प्रोग्राम फ़ाइलें \ PostgreSQL का समर्थन किया।मैं PostgreSQL में डेटाबेस की स्कीमा कैसे निर्यात कर सकता हूं?

अब मैं एक नए कंप्यूटर में काम कर रहा हूं और मैं बाहरी डिस्क में संग्रहीत पिछले पोस्टग्रेज़ डेटाबेस आयात करना चाहता हूं।

मैं बैकअप फ़ोल्डर में स्थित एक विशिष्ट डेटाबेस की स्कीमा निर्यात करना चाहता हूं।

फ़ाइल PostgreSQL\8.3\data\global\pg_database में डेटाबेस डेटाबेस और उनके ओआईडी के बारे में जानकारी शामिल है; उदाहरण के लिए:

"db1" 20012 
"db2" 23456 

मैं "डीबी 1" की स्कीमा निर्यात करना चाहता हूं।

फ़ोल्डर "PostgreSQL\8.3\data\base\20012" में "20012" नामक एक फ़ोल्डर है जिसमें बहुत सारी फ़ाइलें [500 फ़ाइलें] हैं।

क्या उस डेटाबेस की स्कीमा निर्यात करने का कोई तरीका है?

ध्यान दें कि सभी पोस्टग्रेस्क्ल डेटाबेस फ़ाइलें बाहरी हार्ड डिस्क में स्थित हैं और मैं उस डेटाबेस की स्कीमा को SQL फ़ाइल में निर्यात करना चाहता हूं, उस फ़ाइल को ले, इसे चलाएं और स्थानीय स्तर पर समान सटीक डेटाबेस बनाएं।

उत्तर

81

आप pg_dump पर एक नज़र रखना चाहिए:

pg_dump -s databasename 

केवल स्कीमा .sql के रूप में stdout को डंप करेंगे।

विंडोज़ के लिए, आप शायद pg_dump.exe पर कॉल करना चाहेंगे। मेरे पास विंडोज मशीन तक पहुंच नहीं है लेकिन मुझे स्मृति से बहुत यकीन है कि यह आदेश है। देखें कि सहायता आपके लिए भी काम करती है या नहीं।

+0

क्या आप सुनिश्चित हैं कि pg_dump काम करने जा रहा है? कारण डेटाबेस की फाइलें बाहरी डिस्क में स्थित हैं और स्थानीय रूप से नहीं ... – programmer

+0

बशर्ते आप पुराने डेटाबेस सर्वर को शुरू कर सकें, हां। जैसा कि आप शायद जानते हैं pg_dump डेटाबेस सर्वर से दूरस्थ रूप से कनेक्ट हो सकता है। मैं आपकी नई मशीन पर 8.3 इंस्टॉल करने का प्रयास करता हूं और अपनी पुरानी डेटाबेस फ़ाइलों की प्रतिलिपि बनाता हूं और पोस्टग्रेस शुरू करता हूं और देखता हूं कि यह काम करता है या नहीं। मैंने सोचा था कि आप केवल सामान्य रूप से स्कीमा डंप करने के बारे में अधिक पूछ रहे थे। – Anew

+1

कोई समस्या नहीं, धन्यवाद – programmer

2

एक नया पोस्टग्रेस्क्ल सर्वर स्थापित करें और अपनी डेटा डिस्क को अपनी बाहरी डिस्क से फ़ाइलों के साथ बदलें।

तब आप उस PostgreSQL सर्वर शुरू करने और pg_dump का उपयोग कर डेटा पुनः प्राप्त (pg_dump स्कीमा केवल-के लिए -s के रूप में उल्लेख)

+0

मैंने डेटा फ़ोल्डर को पुराने के साथ बदल दिया, फिर मैंने सेवा शुरू की, pgAdmin III एप्लिकेशन खोला, सर्वर आइकन पर क्लिक किया [मुझे केवल 1 सर्वर मिला, पिछला एक]। क्या मैं एक नया सर्वर बनाउंगा? क्योंकि यह काम नहीं करता है ... मैं अभी भी उन डेटाबेसों को देखता हूं जिन्हें मैंने शुरुआत में बनाया था ... और बैकअप वाले नहीं – programmer

+0

क्या आप वाकई फ़ाइलों को सही डेटा फ़ोल्डर में पॉप अप करते हैं? मैंने विंडोज़ में पोस्टग्रेस्क्ल का उपयोग नहीं किया है, इसलिए मुझे यकीन नहीं है कि डेटा फ़ोल्डर कहां होगा। मुझे यह भी यकीन नहीं है कि क्या pgAdmin कुछ भी कैश करता है, इसलिए आपको फिर से कनेक्ट करने की आवश्यकता हो सकती है ... –

+0

अच्छी तरह से मैंने सी: \ प्रोग्राम फ़ाइलें \ PostgreSQL \ 8.3 में पुरानी बैकअप डेटा फ़ाइल की प्रतिलिपि बनाई है और मैंने इसे नए के साथ बदल दिया है । साथ ही, जब मैं फिर से pgAdmin खोलता हूं, तो यह पुराने कंप्यूटर के पासवर्ड की मांग करता है, यह एक अच्छा संकेत है लेकिन बाद में डेटाबेस पेड़ में मुझे अपने डेटाबेस नहीं दिखते हैं – programmer

4

आप केवल बनाने टेबल चाहते हैं, तो आप क्या कर सकते हैं pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/' में सक्षम हो जाएगा

19

में लिनक्स आप इस

pg_dump -U postgres -s postgres > exportFile.dmp 

की तरह कर सकते हैं शायद यह भी में काम कर सकते हैं विंडोज pg_dump.exe

pg_dump.exe -U postgres -s postgres > exportFile.dmp 
+0

विंडोज (और मैक) FYI में वैसे ही काम करता है। –

8

के साथ एक ही कोशिश नहीं करता है, तो मैं Postgres 9.6 चला रहा हूँ जहाँ मैं डेटा के साथ एक विशेष स्कीमा निर्यात करने के लिए किया था।

मैं निम्न आदेश का प्रयोग किया:

pg_dump.exe -U username -d databasename -n schemaname > C:\mylocation\mydumpfilename.dmp 

आप डेटा के बिना केवल स्कीमा चाहते हैं, n

नीचे के बजाय स्विच s का उपयोग करते हैं pg_dump स्विच सूची है:

C:\Program Files\PostgreSQL\9.6\bin>pg_dump --help 
pg_dump dumps a database as a text file or to other formats. 

Usage: 
    pg_dump [OPTION]... [DBNAME] 

General options: 
    -f, --file=FILENAME   output file or directory name 
    -F, --format=c|d|t|p   output file format (custom, directory, tar, 
           plain text (default)) 
    -j, --jobs=NUM    use this many parallel jobs to dump 
    -v, --verbose    verbose mode 
    -V, --version    output version information, then exit 
    -Z, --compress=0-9   compression level for compressed formats 
    --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock 
    -?, --help     show this help, then exit 

Options controlling the output content: 
    -a, --data-only    dump only the data, not the schema 
    -b, --blobs     include large objects in dump 
    -c, --clean     clean (drop) database objects before recreating 
    -C, --create     include commands to create database in dump 
    -E, --encoding=ENCODING  dump the data in encoding ENCODING 
    -n, --schema=SCHEMA   dump the named schema(s) only 
    -N, --exclude-schema=SCHEMA do NOT dump the named schema(s) 
    -o, --oids     include OIDs in dump 
    -O, --no-owner    skip restoration of object ownership in 
           plain-text format 
    -s, --schema-only   dump only the schema, no data 
    -S, --superuser=NAME   superuser user name to use in plain-text format 
    -t, --table=TABLE   dump the named table(s) only 
    -T, --exclude-table=TABLE do NOT dump the named table(s) 
    -x, --no-privileges   do not dump privileges (grant/revoke) 
    --binary-upgrade    for use by upgrade utilities only 
    --column-inserts    dump data as INSERT commands with column names 
    --disable-dollar-quoting  disable dollar quoting, use SQL standard quoting 
    --disable-triggers   disable triggers during data-only restore 
    --enable-row-security  enable row security (dump only content user has 
           access to) 
    --exclude-table-data=TABLE do NOT dump data for the named table(s) 
    --if-exists     use IF EXISTS when dropping objects 
    --inserts     dump data as INSERT commands, rather than COPY 
    --no-security-labels   do not dump security label assignments 
    --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs 
    --no-tablespaces    do not dump tablespace assignments 
    --no-unlogged-table-data  do not dump unlogged table data 
    --quote-all-identifiers  quote all identifiers, even if not key words 
    --section=SECTION   dump named section (pre-data, data, or post-data) 
    --serializable-deferrable wait until the dump can run without anomalies 
    --snapshot=SNAPSHOT   use given snapshot for the dump 
    --strict-names    require table and/or schema include patterns to 
           match at least one entity each 
    --use-set-session-authorization 
           use SET SESSION AUTHORIZATION commands instead of 
           ALTER OWNER commands to set ownership 

Connection options: 
    -d, --dbname=DBNAME  database to dump 
    -h, --host=HOSTNAME  database server host or socket directory 
    -p, --port=PORT   database server port number 
    -U, --username=NAME  connect as specified database user 
    -w, --no-password  never prompt for password 
    -W, --password   force password prompt (should happen automatically) 
    --role=ROLENAME   do SET ROLE before dump 

If no database name is supplied, then the PGDATABASE environment 
variable value is used. 

Report bugs to <[email protected]>.