পিএসকিএল ব্যবহার করার সময় পোস্টগ্রিসে স্কিমা কীভাবে নির্বাচন করবেন?


151

আমার একাধিক স্কিমার সাথে পোস্টগ্রিজ ডাটাবেস রয়েছে। আমি যখন কোনও শেল থেকে ডাটাবেসের সাথে সংযোগ করি psqlএবং আমি চালিত \dtকরি তখন এটি সর্বজনীন ডিফল্ট সংযোগ স্কিমা ব্যবহার করে । আমি উল্লেখ করতে পারি এমন একটি পতাকা আছে বা আমি কীভাবে স্কিমা পরিবর্তন করতে পারি?


উত্তর:


197

পোস্টগ্রেএসকিউএল-এ সিস্টেম নির্ধারণ করে যে কোনও সারণীটি অনুসন্ধানের পথ অনুসরণ করে বোঝানো হয়েছে, যা দেখার জন্য স্কিমার একটি তালিকা।

অনুসন্ধানের পথে প্রথম ম্যাচের টেবিলটি সেইটিকে চেয়েছিল হিসাবে নেওয়া হয়, অন্যথায়, কোনও মিল না থাকলে একটি ত্রুটি উত্থাপিত হয়, এমনকি ডাটাবেসে অন্য স্কিমায় টেবিলের নাম মিল থাকলেও।

বর্তমান অনুসন্ধানের পথটি দেখাতে আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

SHOW search_path;

এবং নতুন স্কিমাটি পথে রাখার জন্য আপনি ব্যবহার করতে পারেন:

SET search_path TO myschema;

অথবা আপনি যদি একাধিক স্কিমা চান:

SET search_path TO myschema, public;

তথ্যসূত্র: https://www.postgresql.org/docs/current/static/ddl-schemas.html


77

আপনি কি ডাটাবেস পরিবর্তন করতে চান?

\l - to display databases
\c - connect to new database

হালনাগাদ.

আমি আপনার প্রশ্ন আবার পড়েছি। স্কিমা প্রদর্শন করতে

\dn - list of schemas

স্কিমা পরিবর্তন করতে, আপনি চেষ্টা করতে পারেন

SET search_path TO

1
কীভাবে এটি পিএসকিএল-তে না করা যায়। কীভাবে "সংযুক্ত"
গণিত

46
\l - Display database
\c - Connect to database
\dn - List schemas
\dt - List tables inside public schemas
\dt schema1. - List tables inside particular schemas. For eg: 'schema1'.

16
স্কিমা নামের পরে
পিরিয়ডটি

1
এটি প্রশ্নের উত্তর দেয় না। তিনি জিজ্ঞাসা করলেন কীভাবে ডিফল্ট স্কিমা পরিবর্তন করবেন। পিএসকিএল-এর জন্য প্রাথমিক কমান্ডগুলি নয়।
কেনি স্টেগম্যানস

27

এই স্কিমা সম্পর্কে তথ্য পেতে পিএসএইচএল কমান্ডের সময়কালের সাথে স্কিমার নাম ব্যবহার করুন।

সেটআপ:

test=# create schema test_schema;
CREATE SCHEMA
test=# create table test_schema.test_table (id int);
CREATE TABLE
test=# create table test_schema.test_table_2 (id int);
CREATE TABLE

সম্পর্কের তালিকা এতে দেখান test_schema:

test=# \dt test_schema.
               List of relations
   Schema    |     Name     | Type  |  Owner   
-------------+--------------+-------+----------
 test_schema | test_table   | table | postgres
 test_schema | test_table_2 | table | postgres
(2 rows)

test_schema.test_tableসংজ্ঞা দেখান :

test=# \d test_schema.test_table
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

সমস্ত সারণী এতে দেখান test_schema:

test=# \d test_schema.
Table "test_schema.test_table"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

Table "test_schema.test_table_2"
 Column |  Type   | Modifiers 
--------+---------+-----------
 id     | integer | 

ইত্যাদি ...


6
আমি missing dt টেস্ট_সেমার পরে পিরিয়ডটি মিস করছি। "ফলাফলের কোনও বার্তা পাওয়া যায় নি" উদাহরণগুলির জন্য ধন্যবাদ, এটি আরও সহজ করে
তুলেছে

14

এটি পুরানো, তবে ডিবিতে সংযোগের জন্য আমি আমার ওরফে রফতানি রেখেছি:

alias schema_one.con="PGOPTIONS='--search_path=schema_one' psql -h host -U user -d database etc"

এবং অন্য স্কিমার জন্য:

alias schema_two.con="PGOPTIONS='--search_path=schema_two' psql -h host -U user -d database etc"

2
চমৎকার ধারণা. আমি বাদ দিতে হবে exportএবং আপনার এলিয়াসে সেমিকোলন। PGOPTIONSআপনি পিএসএইচএল ছাড়ার পরে এইভাবে আর থাকবেন না।
ডোরন গোল্ড

এটি একটি দুর্দান্ত ধারণা, SET search_pathপ্রতিটি একক ক্যোয়ারিতে একটি যুক্ত করার চেয়ে অনেক বেশি ব্যবহারিক । ধন্যবাদ!
হারাবান



0

যদি ডকারের ভিতরে পিএসএইচএল নিয়ে খেলেন তবে এটি এইভাবে চালান:

docker exec -e "PGOPTIONS=--search_path=<your_schema>" -it docker_pg psql -U user db_name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.