পোস্টগ্রিএসকিউএল-তে আমি কীভাবে একটি ডাটাবেসের স্কিমার রফতানি করতে পারি?


111

আমার কম্পিউটারটি ভেঙে গেছে তবে ভাগ্যক্রমে আমি ফোল্ডার সি: \ প্রোগ্রাম ফাইলগুলি \ পোস্টগ্র্রেএসকিউএল ব্যাক আপ করেছি।

এখন আমি একটি নতুন কম্পিউটারে কাজ করছি এবং আমি বাইরের ডিস্কে সঞ্চিত পূর্ববর্তী পোস্টগ্র্যাস ডাটাবেসগুলি আমদানি করতে চাই।

আমি ব্যাকআপ ফোল্ডারে অবস্থিত একটি নির্দিষ্ট ডাটাবেসের স্কিমা রফতানি করতে চাই।

ফাইলটিতে PostgreSQL\8.3\data\global\pg_databaseডাটাবেস এবং তাদের ওআইডি সম্পর্কিত তথ্য রয়েছে; উদাহরণ স্বরূপ:

"db1" 20012
"db2" 23456

আমি "db1" এর স্কিমা রফতানি করতে চাই।

ফোল্ডারে "20012" নামে একটি ফোল্ডার "PostgreSQL\8.3\data\base\20012" রয়েছে যাতে প্রচুর ফাইল [500 ফাইল] থাকে।

সেই ডাটাবেসের স্কিমা রফতানি করার কোনও উপায় আছে কি?

নোট করুন যে সমস্ত পোস্টগ্র্যাস্কল ডাটাবেস ফাইলগুলি একটি বাহ্যিক হার্ড ডিস্কে অবস্থিত এবং আমি একটি এসকিউএল ফাইলে সেই ডাটাবেসের স্কিমা রফতানি করতে চাই, সেই ফাইলটি নেবে, এটি চালাবে এবং স্থানীয়ভাবে একই সঠিক ডাটাবেস তৈরি করতে চাই।

উত্তর:


141

আপনার এক নজর করা উচিত pg_dump:

pg_dump -s databasename

কেবলমাত্র স্কিমা .sql হিসাবে স্টডআউটে ডাম্প করবে।

উইন্ডোজের জন্য, আপনি সম্ভবত কল করতে চাইবেন pg_dump.exe। আমার উইন্ডোজ মেশিনে অ্যাক্সেস নেই তবে কমান্ডের মেমরি থেকে আমি বেশ নিশ্চিত। সহায়তাটি আপনার পক্ষেও কাজ করে কিনা দেখুন।


আপনি কি নিশ্চিত যে পিজি_ডাম্প কাজ করবে? কারণ ডাটাবেসের ফাইলগুলি একটি বাহ্যিক ডিস্কে অবস্থিত এবং স্থানীয়ভাবে নয় ...
প্রোগ্রামার

প্রদত্ত আপনি পুরানো ডাটাবেস সার্ভার শুরু করতে পারেন, হ্যাঁ। আপনি সম্ভবত জানেন যে pg_dump একটি ডাটাবেস সার্ভারের সাথে দূরবর্তীভাবে সংযোগ করতে পারে। আমি আপনার নতুন মেশিনে 8.3 ইনস্টল করার চেষ্টা করব এবং আপনার পুরানো ডাটাবেস ফাইলগুলি অনুলিপি করবো এবং পোস্টগ্রাগগুলি শুরু করব এবং দেখুন কিনা এটি কাজ করে। আমি ভেবেছিলাম আপনি কেবল স্কিমা ডাম্পিং সম্পর্কে আরও সাধারণভাবে জিজ্ঞাসা করছেন, আমার খারাপ।
নতুনভাবে

আমি ইতিমধ্যে পোস্টগ্র্যাস্কিলের 8.3 সংস্করণ ইনস্টল করেছি, নতুন ফোল্ডারে তথ্য ফোল্ডারটি অনুলিপি করেছি, তবে আমি আমার পুরানো ডাটাবেসগুলি দেখতে পাচ্ছি না ...
প্রোগ্রামার

14
@ নতুন ধন্যবাদ এটি কার্যকর। pg_dump -s databasename > schema.sqlফলাফলটি schema.sqlফাইলটিতে আউটপুট দেয়
অ্যারিভরাসান এল

এক্ষেত্রে কাস্টম ডেটা প্রকার সম্পর্কে কীভাবে?
নিকিতা

38

ইন লিনাক্স আপনি ভালো করতে পারবেন

pg_dump -U postgres -s postgres > exportFile.dmp

Pg_dump.exe দিয়ে একই চেষ্টা না করলে এটি উইন্ডোজেও কাজ করতে পারে

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

পিজি_ডাম্প: [আর্কিভার (ডিবি)] ডাটাবেস "গোল্ডেনডেমন" এর সাথে সংযোগ ব্যর্থ হয়েছে: অবৈধ পোর্ট নম্বর: "-স"
জেমি হাটবার

33

আমি Postgres 9.6 চালাচ্ছি যেখানে আমাকে ডেটা সহ একটি বিশেষ স্কিমা রফতানি করতে হয়েছিল।

আমি নিম্নলিখিত কমান্ডটি ব্যবহার করেছি:

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

আপনি যদি ডেটা ছাড়াই কেবল স্কিমা চান তবে sপরিবর্তে স্যুইচটি ব্যবহার করুনn

নীচে পিজি_ডাম্প সুইচ তালিকাটি রয়েছে:

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 <pgsql-bugs@postgresql.org>.

11
pg_dump -d <databasename> -h <hostname> -p <port> -n <schemaname> -f <location of the dump file>

দয়া করে লক্ষ্য করুন যে সেই স্কিমাটি অ্যাক্সেস করার জন্য আপনার যথেষ্ট সুযোগ রয়েছে। আপনি যদি নির্দিষ্ট ব্যবহারকারী হিসাবে ব্যাকআপ নিতে চান তবে সেই কমান্ডের আগে ব্যবহারকারীর নাম যুক্ত করুন-U


1
pg_dump -s <ডেটাবেসনাম> -হ <হোস্টনেম> -পি <port> -n <scheameame> -f <ডাম্প ফাইলের অবস্থান> শুধুমাত্র স্কিমা পেতে পতাকাটি -d থেকে -s এ পরিবর্তন করুন। এটি কেবলমাত্র এই উত্তরগুলির উন্নতি করার জন্য অন্যান্য লোকেরাও উল্লেখ করেছে।
h0lmes221B

এটি পুরো
ডিবিটি

7

আপনি যদি কেবল তৈরি টেবিলগুলি চান তবে আপনি এটি করতে পারেন pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/'


3

জন্য লিনাক্স: (ডাটা বাদ)

  • pg_dump -s -t tablename databasename > dump.sql (ডাটাবেসে একটি নির্দিষ্ট টেবিলের জন্য)

  • pg_dump -s databasename > dump.sql (পুরো ডাটাবেসের জন্য)


2

একটি নতুন পোস্টগ্র্যাসকিএল সার্ভার সেট আপ করুন এবং আপনার বাহ্যিক ডিস্ক থেকে ফাইলগুলির সাথে এর ডেটা ফোল্ডারটি প্রতিস্থাপন করুন।

তারপরে আপনি সেই পোস্টগ্রেকস্লিএল সার্ভার শুরু করতে পারবেন এবং pg_dump ব্যবহার করে ডেটা পুনরুদ্ধার করতে পারবেন (কেবলমাত্র উল্লিখিত হিসাবে স্কিমার জন্য pg_dump -s)


আমি পুরানোটির সাথে ডেটা ফোল্ডারটি প্রতিস্থাপন করেছি, তারপরে আমি পরিষেবাটি শুরু করেছি, পিজএডমিন তৃতীয় অ্যাপ্লিকেশনটি খুললাম, সার্ভার আইকনে ক্লিক করেছি [আমি কেবল একটি সার্ভার পেয়েছি, পূর্ববর্তীটি]। আমি কি নতুন সার্ভার তৈরি করব? কারণ এটি কাজ করে না ... আমি এখনও শুরুতে আমার তৈরি ডেটাবেসগুলি দেখি ... এবং
প্রোগ্রামার

আপনি কি নিশ্চিত যে আপনি ফাইলগুলি সঠিক ডেটা ফোল্ডারে রেখেছেন? আমি উইন্ডোজে পোস্টগ্র্যাস্কেল ব্যবহার করি নি তাই ডেটা ফোল্ডারটি কোথায় হবে সে সম্পর্কে আমি নিশ্চিত নই। আমিও নিশ্চিত নই যে পগা অ্যাডমিন কোনও কিছু ক্যাশে রাখে যাতে আপনারও আবার সংযোগের প্রয়োজন হতে পারে ...
ড্রোন.এই

ঠিক আছে আমি স্রেফ পুরানো ব্যাকআপ ডেটা ফাইলটি সি: \ প্রোগ্রাম ফাইলস g পোস্টগ্রিসকিউএল \ 8.3 এ অনুলিপি করেছি এবং আমি এটি নতুন দিয়ে প্রতিস্থাপন করেছি। এছাড়াও, আমি যখন আবার পিজএডমিনটি খুলি, তখন এটি পুরানো কম্পিউটারের পাসওয়ার্ডের জন্য জিজ্ঞাসা করে, এটি একটি ভাল লক্ষণ তবে পরে ডেটাবেসেস ট্রিতে আমি আমার ডাটাবেসগুলি দেখতে পাই না
প্রোগ্রামার

এইচএম ... আমি "ডিবি 1" নামে একটি ডাটাবেস তৈরি করেছি [পুরানো কম্পিউটার থেকে একটি ডাটাবেস], যখন আমি এটিতে ক্লিক করি পিজএডমিন আউটপুট "একটি ত্রুটি ঘটেছে: ডাটাবেস 20012 এর জন্য ফ্যাটাল ক্যাশে অনুসন্ধান ব্যর্থ হয়েছে", এর অর্থ কী?
প্রোগ্রামার

1
দেখে মনে হচ্ছে প্যাগএডমিন অনেক তথ্য ক্যাশে করে। আপনার ডাটাবেস সংযোগটি পিজিএডমিনে ফেলে দিন এবং এটি পুনরায় তৈরি করুন। এটি সমাধান করা উচিত যদি সমস্যাটি ক্যাশিংয়ের আশেপাশে থাকে ...
ড্রোন.২৩

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.