PostgreSQL ডাটাবেস পুনরুদ্ধার করার সময় কীভাবে সুবিধাগুলি সম্পর্কিত সমস্যাগুলি সমাধান করবেন


104

কমান্ড সহ পোস্টগ্রিস ডেটাবেস-এর জন্য আমি একটি পরিষ্কার, কোনও মালিকের ব্যাকআপ ফেলেছি

pg_dump sample_database -O -c -U

পরে, যখন আমি সাথে ডাটাবেস পুনরুদ্ধার

psql -d sample_database -U app_name

তবে, আমি বেশ কয়েকটি ত্রুটির মুখোমুখি হয়েছি যা আমাকে তথ্য পুনরুদ্ধার করতে বাধা দেয়:

ERROR:  must be owner of extension plpgsql
ERROR:  must be owner of schema public
ERROR:  schema "public" already exists
ERROR:  must be owner of schema public
CREATE EXTENSION
ERROR:  must be owner of extension plpgsql

আমি সরল-পাঠ্য এসকিউএল pg_dumpউত্পন্ন উত্সে খনন করেছি এবং আমি দেখতে পেয়েছি এটিতে এসকিউএল রয়েছে

CREATE SCHEMA public;
COMMENT ON SCHEMA public IS 'standard public schema';
CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;
COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

আমি মনে করি এর কারণগুলি হ'ল ব্যবহারকারীর স্কিমা app_nameপরিবর্তন করার সুযোগ নেই publicএবং plpgsql

আমি এই সমস্যাটি কীভাবে সমাধান করতে পারি?


5
আপনার যা দরকার তা না থাকে তাহলে plpgsqlতাহলে DROP EXTENSION plpgsqlআপনি আগে pg_dump। এটি আপনার অ্যাপ্লিকেশনটিকে একটি দুর্দান্ত ব্যবহারকারীর তুলনায় নিরাপদ এবং এটি ত্রুটিগুলি উপেক্ষা করার চেয়ে সুবিধাজনক (আপনি যদি ব্যবহার করেন তবে বোমাটি ব্যবহার করেন ) --single-transactionবা -v ON_ERROR_STOP=1। এটি একটি পরিচিত সমস্যা, [পোস্টগ্রিস বিকাশকারীদের দ্বারা দৈর্ঘ্যে আলোচনা করা | postgresql.org/message-id/… তবে 9.3 হিসাবে ঠিক করা হয়নি।
মার্ক ই। হাজেস

উত্তর:


63

সমস্যা সমাধানের জন্য আপনাকে অবশ্যই যথাযথ মালিকানার অনুমতিগুলি নির্ধারণ করতে হবে। নীচে চেষ্টা করুন যা নির্দিষ্ট ব্যবহারকারীর জন্য সমস্ত অনুমতি সম্পর্কিত সমস্যাগুলি সমাধান করা উচিত তবে মন্তব্যগুলিতে বলা হয়েছে যে এটি উত্পাদনে ব্যবহার করা উচিত নয়:

root@server:/var/log/postgresql# sudo -u postgres psql
psql (8.4.4)
Type "help" for help.

postgres=# \du
               List of roles
    Role name    | Attributes  | Member of
-----------------+-------------+-----------
 <user-name>    | Superuser   | {}
                 : Create DB
 postgres       | Superuser   | {}
                 : Create role
                 : Create DB

postgres=# alter role <user-name> superuser;
ALTER ROLE
postgres=#

সুতরাং একটি সুপারউসার অ্যাকাউন্টের অধীনে ডাটাবেসে কানেক্ট করুন sudo -u postgres psqlএবং একটি ALTER ROLE <user-name> Superuser;বিবৃতি কার্যকর করুন ।

মনে রাখবেন এটি মাল্টি-সাইট হোস্টিং সার্ভারের সেরা সমাধান নয় তাই পরিবর্তে স্বতন্ত্র ভূমিকা নির্ধারণের দিকে নজর দিন: https://www.postgresql.org/docs/current/static/sql-set-role.html এবং https : //www.postgresql.org/docs/current/static/sql-alterrol.html


28
সুপারউসার না হয়ে কি এই উপায় আছে?
ট্র্যাভিস ওয়েব

17
"অবশ্যই যথাযথ মালিকানার অনুমতিগুলি বরাদ্দ করতে হবে" এবং "রোলটারের <ব্যবহারকারীর নাম> সুপারভাইজার" একত্রিত নয়। যথাযথ মালিকানা অর্থ দাঁড়ায় এই যে app_userহয় না একটি সুপার ব্যবহারকারী।
মার্ক ই। হাজেস

@ মেহাজে দয়া করে ভোটের ডাউনটির বিপরীতে উত্তরটির কথাটি আপডেট করুন।
ড্যানিয়েল সোকলোভস্কি

5
আইএমএইচও এটি সমাধান নয় তবে উত্পাদন থেকে এড়ানো উচিত work
Dmytriy Voloshyn

6
একটি সাধারণ ব্যবহারকারীর পক্ষে খারাপ পরামর্শsuperuser
এভরেন ইয়ুর্তেসেন

55

এডাব্লুএস আরডিএস ব্যবহারকারীরা যদি এটি পেয়ে থাকেন তবে এটি হ'ল কারণ আপনি কোনও সুপারভাইজার নন এবং অ্যাউজ ডকুমেন্টেশন অনুসারে আপনি এক হতে পারবেন না। আমি খুঁজে পেয়েছি আমাকে এই ত্রুটিগুলি উপেক্ষা করতে হবে।


5
এই ত্রুটিটি আমার (AWS আরডিএস pg_restore) সম্পূর্ণ করতে পুনরুদ্ধারকে আটকাচ্ছে। এই ত্রুটিগুলি উপেক্ষা করার জন্য কোনও টিপস?
avjaarsveld

পিএস আমি pg_restore- এর জন্য এক্স-অন-ত্রুটি ব্যবহার করি নি
avjaarsveld

6
আমি এটি পেয়েছি, আরডিএসে, সমস্যাটি COMMENT ON EXTENSIONনয় CREATE EXTENSION,। মন্তব্যগুলি সরান এবং আপনার ভাল হওয়া উচিত।
পকোচ

গুগল ক্লাউড স্টোরেজ এর সাথে @pkoch একই।
এক্সটেনশনে সম্প্রসারণটি

25

গুগল ক্লাউড প্ল্যাটফর্ম ব্যবহারকারীদের জন্য, কোনও ত্রুটি আমদানি প্রক্রিয়াটি বন্ধ করবে। আমি জারি করা pg_dump কমান্ডের উপর নির্ভর করে ব্যক্তিগতভাবে আমি দুটি ভিন্ন ত্রুটির মুখোমুখি হয়েছি:

1- The input is a PostgreSQL custom-format dump. Use the pg_restore command-line client to restore this dump to a database.

ঘটে যখন আপনি আপনার ডিবিটিকে একটি সাদামাটা পাঠ্য বিন্যাসে ফেলে দেওয়ার চেষ্টা করেছেন। অর্থাত্ যখন কমান্ডটিতে -Fp বা - formatt = প্লেইন প্যারামিটারের অভাব হয়। যাইহোক, আপনি যদি এটি আপনার আদেশে যুক্ত করেন তবে আপনি নিম্নলিখিত ত্রুটির মুখোমুখি হতে পারেন:

2- SET SET SET SET SET SET CREATE EXTENSION ERROR: must be owner of extension plpgsql

এই অনুমতি ইস্যু আমি দেওয়া কমান্ড ব্যবহার করে ঠিক করতে পারিনি করেছি GCP ডক্স , গুগল Postgres দল থেকে এই বর্তমান থ্রেড বা নিম্নলিখিত পরামর্শ থেকে টিপস এখানে । যা নিম্নলিখিত কমান্ডটি ইস্যু করার সুপারিশ করেছে:

pg_dump -Fp --no-acl --no-owner -U myusername myDBName > mydump.sql

আমার ক্ষেত্রে যে কৌশলটি করেছিল তা হ'ল ম্যানুয়ালি ডাম্প ফাইলটি সম্পাদনা করা এবং পিএলপিএইচএসএল সম্পর্কিত সমস্ত আদেশের মন্তব্য করা comment

আমি আশা করি এটি জিসিপি-নির্ভর ব্যক্তিদের সহায়তা করে।

হালনাগাদ :

এক্সটেনশনগুলি মন্তব্য করে ফাইলটি ডাম্প করা সহজ, বিশেষত যেহেতু কিছু ডাম্প বিশাল হতে পারে: pg_dump ... | grep -v -E '(CREATE\ EXTENSION|COMMENT\ ON)' > mydump.sql

যা পিএলপ.এস.কি.এল-এ সংকুচিত করা যেতে পারে: pg_dump ... | grep -v -E '(CREATE\ EXTENSION\ IF\ NOT\ EXISTS\ plpgsql|COMMENT\ ON\ EXTENSION\ plpgsql)' > mydump.sql


1
GCP এখন সঠিক হয়েছে pg_dumpতাদের ব্যবহার করার জন্য কমান্ড ডক্স :pg_dump -U [USERNAME] --format=plain --no-owner --no-acl [DATABASE_NAME] \ | sed -E 's/(DROP|CREATE|COMMENT ON) EXTENSION/-- \1 EXTENSION/g' > [SQL_FILE].sql
রাশ

14

আপনি সম্ভবত এই ক্ষেত্রে ত্রুটি বার্তাগুলি নিরাপদে উপেক্ষা করতে পারেন। পাবলিক স্কিমাতে একটি মন্তব্য যুক্ত করতে ব্যর্থ হওয়া এবং plpgsql ইনস্টল করা (যা ইতিমধ্যে ইনস্টল করা উচিত) কোনও সত্যিকারের সমস্যার কারণ হতে পারে না।

তবে, আপনি যদি একটি সম্পূর্ণ পুনরায় ইনস্টল করতে চান তবে আপনার উপযুক্ত অনুমতি সহ কোনও ব্যবহারকারী প্রয়োজন। অবশ্যই আপনার অ্যাপ্লিকেশনটি অবশ্যই নিয়মিতভাবে চালিত হওয়া উচিত নয়।


12

সংক্ষিপ্ত উত্তর: এড়িয়ে যান।

এই মডিউলটি পোস্টগ্রিসের অংশ যা এসকিউএল ভাষা প্রক্রিয়া করে। দূরবর্তী ডাটাবেস অনুলিপি করার অংশ হিসাবে ত্রুটিটি প্রায়শই পপ আপ হয়ে যায়, যেমন একটি 'হেরকু পিজি: পুল' দিয়ে। এটি আপনার এসকিউএল প্রসেসরটিকে ওভাররাইট করে না এবং আপনাকে সে সম্পর্কে সতর্ক করে।


9

-LPg_restore এর সাথে নেওয়া ফাইলটি নির্দিষ্ট করে পতাকা ব্যবহার করার চেষ্টা করুনpg_dump -Fc

-L list-file - ব্যবহার-তালিকা = তালিকা-ফাইল

তালিকা-ফাইলে তালিকাভুক্ত কেবলমাত্র সংরক্ষণাগার উপাদানগুলি পুনরুদ্ধার করুন এবং ফাইলটিতে প্রদর্শিত ক্রম হিসাবে তাদের পুনরুদ্ধার করুন। মনে রাখবেন যে -n বা -t এর মতো ফিল্টারিং স্যুইচ যদি -L ব্যবহার করা হয় তবে তারা পুনরুদ্ধারকৃত আইটেমগুলিকে আরও সীমাবদ্ধ করবে।

পূর্ববর্তী -l অপারেশনের আউটপুট সম্পাদনা করে সাধারণত তালিকা-ফাইল তৈরি করা হয়। লাইনগুলি সরানো বা সরিয়ে ফেলা যায় এবং লাইনের শুরুতে একটি সেমিকোলন (;) রেখেও মন্তব্য করা যায়। উদাহরণের জন্য নীচে দেখুন।

https://www.postgresql.org/docs/9.5/app-pgrestore.html

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep -v 'COMMENT - EXTENSION' > pg_restore.list
pg_restore -L pg_restore.list pg.dump

এখানে আপনি কেবল মন্তব্যটি আউটপুট করে দেখতে পারেন যে উল্টোটি সত্য:

pg_dump -Fc -f pg.dump db_name
pg_restore -l pg.dump | grep 'COMMENT - EXTENSION' > pg_restore_inverse.list
pg_restore -L pg_restore_inverse.list pg.dump
--
-- PostgreSQL database dump
--

-- Dumped from database version 9.4.15
-- Dumped by pg_dump version 9.5.14

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


--
-- PostgreSQL database dump complete
--

আমি মনে করি উপরোক্তটি সঠিক, প্লাগইনগুলির জন্য মন্তব্যগুলি বাদ দিলে আপনার অ্যাপের কার্যকারিতা প্রভাবিত হবে না
Andreas

3

লোকেদের ব্যবহারের জন্য ডেস্কটপ AWS , COMMENT ON EXTENSIONশুধুমাত্র সম্ভব হিসাবে সুপার-ইউজার , এবং হিসাবে আমরা ডক্স দ্বারা কি জানেন, যদি RDS দৃষ্টান্ত আমাজন দ্বারা পরিচালিত হয়। যেমন, প্রতিলিপি তৈরির মতো জিনিসগুলি ভাঙ্গতে আপনার বাধা দেওয়ার জন্য, আপনার ব্যবহারকারীরা - এমনকি আপনি যখন উদাহরণটি তৈরি করেন তখন সেট আপ করা রুট ব্যবহারকারীদের - এর কাছে অতিরিক্ত সুপারস সুবিধা থাকবে না:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.PostgreSQL.CommonDBATasks.html

আপনি যখন কোনও ডিবি ইনস্ট্যান্স তৈরি করেন, আপনি যে মাস্টার ব্যবহারকারী সিস্টেম অ্যাকাউন্টটি তৈরি করেন তা rds_superuser ভূমিকাতে বরাদ্দ করা হয়। আরডিএস_সুপারসার ভূমিকাটি পোস্টগ্রিএসকিউএল সুপারজারের ভূমিকার অনুরূপ পূর্ব-সংজ্ঞায়িত অ্যামাজন আরডিএসের ভূমিকা (স্থানীয় উদাহরণগুলিতে প্রথাগতভাবে নামযুক্ত পোস্টগ্রিস), তবে কিছু বিধিনিষেধ সহ। পোস্টগ্রেএসকিউএল সুপারসউসার ভূমিকা হিসাবে, আরডিএস_সুপারসার ভূমিকাটি আপনার ডিবি ইনস্ট্যান্সে সর্বাধিক সুবিধাগুলি রয়েছে এবং আপনার ডিবি উদাহরণটিতে সর্বাধিক অ্যাক্সেসের প্রয়োজন না হলে ব্যবহারকারীদের এই ভূমিকাটি অর্পণ করা উচিত নয়।

এই ত্রুটিটি ঠিক করার জন্য, কেবলমাত্র --এসকিউএল এর লাইনগুলিতে মন্তব্য করতে ব্যবহার করুনCOMMENT ON EXTENSION


2
অথবা ফেরত মন্তব্য যখন ডাম্পিং: pg_dump --no-comments
দিমিত্রি I.

2

আপনার পুনরুদ্ধার করার আগে পোস্টিগ্রেস (অ্যাডমিন) ব্যবহারকারীকে স্কিমা ডাম্প করতে, এটি পুনরায় তৈরি করতে এবং ব্যবহারের জন্য ব্যক্তিগতকৃত মঞ্জুরি দেওয়ার জন্য ব্যবহার করুন। এক আদেশে:

sudo -u postgres psql -c "DROP SCHEMA public CASCADE;
create SCHEMA public;
grant usage on schema public to public;
grant create on schema public to public;" myDBName

1

আমার জন্য, আমি পিজএডমিন দিয়ে একটি ডেটাবেস স্থাপন করছিলাম এবং মনে হয় ডাটাবেস তৈরির সময় মালিককে সেট করা যথেষ্ট ছিল না। আমি নিচে নেভিগেট করতে ছিল 'সর্বজনীন' স্কিমা এবং সেট মালিক সেখানে পাশাপাশি (মূলত' postgres 'ছিল)।


0

যে সমস্ত ব্যক্তিরা COMMENT ONবিবৃতিতে বিষয়টি নীচে সঙ্কুচিত করেছেন (নীচে বিভিন্ন উত্তর অনুসারে) এবং যাদের সোর্স ডাটাবেসে ডাম্প ফাইলটি তৈরি করা হয়েছে তার মধ্যে অতি ব্যবহারকারীর অ্যাক্সেস রয়েছে, তাদের পক্ষে সহজ সমাধান হতে পারে মন্তব্যগুলিকে ডাম্পের অন্তর্ভুক্ত করা থেকে বিরত করা উত্স ডাটাবেস থেকে এগুলি সরিয়ে প্রথমে ফাইল ফেলা হচ্ছে ...

COMMENT ON EXTENSION postgis IS NULL;
COMMENT ON EXTENSION plpgsql IS NULL;
COMMENT ON SCHEMA public IS NULL;

ভবিষ্যতের ডাম্প তখন COMMENT ONবিবৃতি অন্তর্ভুক্ত করবে না ।


1
রেলগুলিতে স্থানীয়ভাবে বিকাশ করা (যা স্কিমা মাইগ্রেশন চালিত হওয়ার পরে স্বয়ংক্রিয়ভাবে একটি নতুন ডাম্প ফাইল তৈরি করে), এই সমাধানগুলি rails db:resetপ্রতিবার স্কিমা চালানোর সাথে সাথে আমাকে ডাবল ফাইল থেকে কমেন্টগুলি সরিয়ে না রেখে কেবল একটি ডাব্লুএস আরডিএস পোস্টগ্রেক্সেল উদাহরণের বিরুদ্ধে চালাতে সক্ষম করে ables মাইগ্রেশন।
মার্ক স্নাইডার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.