আমি যখন পিএসএলএল এর ভিতরে \ dt (+) ব্যবহার করি তখন কেন আমি আমার টেবিলটি (পোস্টগ্রিএসকিউএল) দেখতে পাচ্ছি না?


12

আমি donorস্কিমায় টেবিলটি তৈরি করেছি reference:

CREATE TABLE reference.donor (
    donor_code smallint PRIMARY KEY,
    donor_name character varying NOT NULL,
    donor_type smallint REFERENCES reference.donor_type (type_id),
    alpha_2_code char(2) REFERENCES reference.iso_3166_1 (alpha_2_code)
);

আমি টেবিলটি জনসংখ্যা হিসাবে লিখেছি:

INSERT INTO reference.donor (donor_code, donor_name, donor_type, alpha_2_code)
SELECT donor_code, donor_name, donor_type, alpha_2_code
FROM reference.donor_template;

আমি যখন চালাচ্ছি:

\dt+ reference.*

পিএসকিএল-এর ভিতরে আমি reference.donorটেবিলটি দেখছি :

                          List of relations
  Schema   |      Name      | Type  |  Owner   | Size  | Description 
-----------+----------------+-------+----------+-------+-------------
 reference | donor          | table | postgres | 16 kB | 
 reference | donor_template | table | postgres | 16 kB | 
 reference | donor_type     | table | postgres | 16 kB | 
 reference | iso_3166_1     | table | postgres | 48 kB | 
(4 rows)

তবে যখন আমি চালিত \dt+ donor*(বা \dt(+)) আমি reference.donorটেবিলটি দেখতে পাই না :

                          List of relations
  Schema   |      Name      | Type  |  Owner   | Size  | Description 
-----------+----------------+-------+----------+-------+-------------
 oecd_cl   | donor          | table | postgres | 16 kB | 
 reference | donor_template | table | postgres | 16 kB | 
 reference | donor_type     | table | postgres | 16 kB | 
(3 rows)

আমি কেবল reference.donorচালাচ্ছি \dt+ reference.*বা টেবিলটি দেখতে পাচ্ছি কেন \dt+ *.donor?
আমি এটি \dt(বা \dt+) এটি প্রদর্শিত হবে বলে আশা করছিলাম , তবে তা হয় না।

আমার search_pathস্কিমা অন্তর্ভুক্ত এবং referenceব্যবহারকারীর স্কিমাতে postgresসমস্ত অনুমতি আছে এবং স্কিমায় referenceসমস্ত টেবিল রয়েছে:

GRANT ALL ON ALL TABLES IN SCHEMA reference TO postgres;

কেবল পরিষ্কার করার জন্য, আমার কাছে দুটি donorটেবিল রয়েছে, তবে সেগুলি দুটি পৃথক স্কিমায় অর্থাৎ, oecd.donor& এ রয়েছে reference.donor। (আমি oecd.donorযখন \dt(+)পিএসকিএল ব্যবহার করি তখন কোনও সমস্যা ছাড়াই দেখতে পাচ্ছি)।

উত্তর:


11

পিএসকিএল-তে ডকুমেন্টেশন ব্যাখ্যা করে:

যখনই patternপ্যারামিটারটি পুরোপুরি বাদ দেওয়া হয়, \dকমান্ডগুলি সমস্ত স্ক্রিপ্ট প্রদর্শন করে যা বর্তমান স্কিমা অনুসন্ধানের পথে দৃশ্যমান - *এটি প্যাটার্ন হিসাবে ব্যবহারের সমতুল্য । (কোনও বস্তু দৃশ্যমান বলে মনে করা হয় যদি এটির সমন্বিত স্কিমা অনুসন্ধানের পথে থাকে এবং একই ধরণের নাম এবং নামের কোনও বস্তু অনুসন্ধানের পথে আগে না উপস্থিত হয় This যোগ্যতা।) দৃশ্যমানতা নির্বিশেষে ডাটাবেসে সমস্ত অবজেক্ট দেখতে *.*প্যাটার্ন হিসাবে ব্যবহার করুন।

বোল্ড জোর আমার।
স্পষ্টতই, আপনার অনুসন্ধানের পথটিoecd_cl আগে referenceছিল । আপনার উদ্দেশ্যে এটি ব্যবহার করুন:

\dt *.donor*

এবং আপনি পাবেন:

                          List of relations
  Schema   |      Name      | Type  |  Owner   | Size  | Description 
-----------+----------------+-------+----------+-------+-------------
 oecd_cl   | donor          | table | postgres | 16 kB | 
 reference | donor          | table | postgres | 16 kB | 
 reference | donor_template | table | postgres | 16 kB | 
 reference | donor_type     | table | postgres | 16 kB | 
(4 rows)

ঠিক আছে, আমি এটি পেয়েছি এটি একটি ফলোআপ প্রশ্ন: আমি যদি না জানতাম যে একটি ডিবিতে দুটি ভিন্ন স্কিমায় একই নামের দুটি টেবিল রয়েছে এবং এই ডিবিতে সমস্ত স্কিমায় সমস্ত টেবিলগুলি দেখতে চেয়েছিল, সেখানে কি কোনও পিএসকিএল মেটা কমান্ড রয়েছে? search_pathপ্রথমটিতে কোন স্কিমা স্থাপন করা হয়েছে তা নির্বিশেষে এবং আমাকে টেবিল / স্কিমার নামগুলি অগ্রিমভাবে জেনে ছাড়া এগুলি সমস্ত প্রদর্শিত হবে ? অথবা আমি information schemaউদাহরণ জিজ্ঞাসা করা ভাল , : SELECT table_schema, table_name FROM information_schema.tables ORDER BY table_schema, table_name;?
dw8547

@ user4842454: তথ্য স্কিমার নিজস্ব ক্যাভেট রয়েছে। সমস্ত টেবিল দেখতে (সিস্টেম ক্যাটালগ সহ) \dt *.*উদ্ধৃতিতে নির্দেশিত হিসাবে ব্যবহার করুন ।
এরউইন ব্র্যান্ডস্টেটার

1

প্রথম কমান্ড কাজ করে কারণ সমস্ত তালিকাভুক্ত টেবিলগুলির স্কিমাতে 'রেফারেন্স' রয়েছে। দ্বিতীয় কমান্ড 'দাতা' এর জন্য একই কাজ করে। সুতরাং সম্পর্কের "संदर्भ.iso_3166_1" এর নামে কোনও 'দাতা' নেই। যদি আপনি iso_3166_1 তালিকাবদ্ধ করতে চান তবে কেবল চেষ্টা করুন

    \dt+ iso*

রেফ: http://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-PATTERNS


প্রশ্নটি কেন reference | donorদ্বিতীয় কমান্ডের সাথে তালিকাভুক্ত করা হয়নি।
ypercubeᵀᴹ

@ সাহাপএসিসি: কেন \dt(বা \dt+) রেফারেন্স.ডোনার টেবিলটি তালিকাবদ্ধ না করে সে সম্পর্কে আমার মূল উদ্বেগ । রেফারেন্স অনুসারে সব ঠিক আছে is
dw8547
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.