ত্রুটি: কোনও স্কিমা তৈরি করতে নির্বাচিত হয়নি


38

আমি একটি অ্যামাজন আরডিএস পোস্টগ্রিস্কেল ডাটাবেসে কাজ করছি যেখানে আমি জানি যে পাবলিক স্কিমা নিয়ে কিছু সমস্যা হয়েছিল (সম্ভবত এটি বাদ দেওয়া হয়েছিল)। তবে স্পষ্টতই স্কিমা বিদ্যমান, এবং যাইহোক সমস্যাটি সমাধান হয় না। এখানে সদ্য নির্মিত খালি ডাটাবেস সহ একটি নমুনা সেশন:

mydb=> CREATE TABLE distributors (
mydb(>     did     integer,
mydb(>     name    varchar(40) UNIQUE
mydb(> );
ERROR:  no schema has been selected to create in
mydb=> show search_path;
  search_path   
----------------
 "$user",public
(1 row)

mydb=> create schema public;
ERROR:  schema "public" already exists

কোন ইঙ্গিত? আমার কী সন্ধান করা উচিত?

সমাধান। ড্যানিয়েল ভুর্তির জবাবের জন্য ধন্যবাদ আমি নীচের সাথে সমাধান করেছি:

grant usage on schema public to public;
grant create on schema public to public;

এইগুলি কি পাবলিক স্কিমে ডিফল্ট অনুমতি আছে?

আমার একক ব্যবহারকারীর ডেটাবেস অ্যাক্সেস করতে পারে তাই আমি মনে করি এটি যাইহোক সুরক্ষা ঝুঁকি বাড়িয়ে তুলতে পারে না ...

আমি মনে করি টেমপ্লেট 1 এ আমারও একই পরিবর্তন করা উচিত । এটা কি সঠিক? টেমপ্লেট 1-এ অনুমতিগুলি সঠিক (কিনা বলুন, ডিফল্ট মান) সঠিক কিনা তা আমি কীভাবে পরীক্ষা করতে পারি?


3
আপনার ব্যবহারকারীর পাবলিক স্কিমে টেবিলগুলি তৈরি করার প্রয়োজনীয় সুযোগ-সুবিধা নেই।
a_horse_with_no_name

সম্পাদনা অনুসরণ করে: হ্যাঁ, টেমপ্লেট 1 এ সংযুক্ত করুন এবং স্কিমা অনুমতিগুলি পরীক্ষা করুন (সম্পাদিত উত্তর দেখুন)।
ড্যানিয়েল ভ্যারিট

উত্তর:


34

এর USAGEকোনও স্কিমাতে বিশেষত্ব না রাখলে এটি ঘটে search_path। ডিফল্টরূপে সিউডো-রোল public(সমস্ত ব্যবহারকারীর) publicস্কিমাতে এই সুবিধা রয়েছে , সুতরাং এই ত্রুটিটি স্পষ্টভাবে এটিকে প্রত্যাখ্যান করার পরেই ঘটে:

revoke usage on schema public from public;

টেবিলগুলি (যা বিভিন্ন সুযোগ-সুবিধার মাধ্যমে দেওয়া হয়) এমনকি ডেটা বাছাই না করেই লোকেরা অন্য ব্যক্তির স্কিমায় উঁকি দেওয়া পছন্দসই না হলে এটি প্রয়োজন when

যদি REVOKEএটি সেই ডাটাবেসে না করা হয়, তবে টেমপ্লেট ডাটাবেসে এমনটি ঘটতে পারে যার দ্বারা নতুন ডাটাবেসগুলি মডেল করা হয় (দেখুন CREATE DATABASE)।


যখন কোনও ব্যবহারকারীর সুবিধাগুলি থাকে তবে স্কিমাতে বিশেষাধিকারের USAGEঅভাব থাকে CREATE, তখন কোনও বস্তু তৈরি করার চেষ্টা করার সময় এটি একটি ভিন্ন ত্রুটি: স্কিমা পাবলিকের জন্য অনুমতি অস্বীকার

পিএসকিএল-এর সুবিধাগুলি পরীক্ষা করতে, ব্যবহার করুন \dn+ public

ডিফল্টরূপে ( \xপঠনযোগ্যতার জন্য বর্ধিত প্রদর্শন সহ প্রদর্শিত ):

# \ dn + সর্বজনীন
স্কিমার তালিকা
- [রেকর্ড 1] ----- + -----------------------
নাম | প্রকাশ্য
মালিক | postgres
অ্যাক্সেস সুবিধা | postgres = ইউসি / postgres
                  | = ইউসি / postgres
বর্ণনা | মানক পাবলিক স্কিমা

রোলেনমের অভাব হওয়ার =অর্থ এটি সমস্ত ভূমিকার জন্য (= সর্বজনীন)

সর্বজনীন ব্যবহারের সুবিধা ছাড়াই

নাম | প্রকাশ্য
মালিক | postgres
অ্যাক্সেস সুবিধা | postgres = ইউসি / postgres
                  | = সি / postgres
বর্ণনা | মানক পাবলিক স্কিমা

সর্বজনীন ব্যবহার বা ক্রিয়েট সুবিধা ছাড়াই

নাম | প্রকাশ্য
মালিক | postgres
অ্যাক্সেস সুবিধা | postgres = ইউসি / postgres
বর্ণনা | মানক পাবলিক স্কিমা

ধন্যবাদ, এই সমাধান! (আমি প্রশ্নে একটি নোট লিখব)।
ইমানুওল পাওলিনী

3

আমার কাছে কাস্টম স্কিমাতে ফাংশন তৈরির সাথে পিজডিম্প ফাইল ছিল এবং আমি কাস্টম স্কিমা নামটি সাধারণের কাছে স্যুইচ করতে চেয়েছিলাম এবং পুরানো স্কিমার সাথে সমস্ত উপস্থিতি খালি (উদাহরণস্বরূপ myschema.tablename টেবিলের নাম হিসাবে) প্রতিস্থাপন করতে এবং ত্রুটি পেতে শুরু করি

ERROR:  no schema has been selected to create in

আমার ক্ষেত্রে ত্রুটি ঘটে যখন ডাম্প বর্তমান লাইনের শুরুতে

SELECT pg_catalog.set_config('search_path', '', false);

আমি দ্বিতীয় আর্গটিকে "পাবলিক" এ পরিবর্তন করেছি

SELECT pg_catalog.set_config('search_path', 'public', false);

এবং সমস্যা চলে গেছে

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