পোস্টগ্রিজএসকিউএল স্কিমায় সারণী তালিকাবদ্ধ করুন


329

আমি যখন \dtপিএসকিএল-এ একটি করি তখন আমি কেবল বর্তমান স্কিমে টেবিলের একটি তালিকা পাই ( publicডিফল্টরূপে)

আমি কীভাবে সমস্ত স্কিমায় বা একটি নির্দিষ্ট স্কিমে সমস্ত টেবিলের তালিকা পেতে পারি?

উত্তর:


505

সমস্ত স্কিমায়:

=> \dt *.*

একটি বিশেষ স্কিমা:

=> \dt public.*

কিছু নিষেধাজ্ঞার সাথে নিয়মিত অভিব্যক্তি ব্যবহার করা সম্ভব

\dt (public|s).(s|t)
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | s    | table | cpn
 public | t    | table | cpn
 s      | t    | table | cpn

উন্নত ব্যবহারকারীরা নিয়মিত-এক্সপ্রেশন স্বরলিপি যেমন চরিত্র শ্রেণীর ব্যবহার করতে পারেন, উদাহরণস্বরূপ [0-9] কোনও অঙ্কের সাথে মেলে। সমস্ত নিয়মিত এক্সপ্রেশন বিশেষ চরিত্রগুলি বিভাগ 9.7.3-তে উল্লিখিত হিসাবে কাজ করে, ব্যতীত .উপরের বর্ণিত বিভাজক হিসাবে নেওয়া হয়, *যা নিয়মিত-এক্সপ্রেশন স্বরলিপিতে অনুবাদ করা হয় .*, ?যা অনুবাদ করা হয় .এবং $যা আক্ষরিকভাবে মিলে যায়। আপনি লিখে প্রয়োজন এ এই প্যাটার্ন অক্ষর অনুকরণ করতে ?জন্য ., (R+|)জন্য R*, অথবা (R|)জন্য R?$নিয়মিত এক্সপ্রেশন চরিত্র হিসাবে প্রয়োজন হয় না কারণ প্যাটার্নটি অবশ্যই পুরো নামের সাথে মেলে, নিয়মিত অভিব্যক্তির স্বাভাবিক ব্যাখ্যার বিপরীতে (অন্য কথায়,$স্বয়ংক্রিয়ভাবে আপনার প্যাটার্নে যুক্ত হবে)। লিখন*শুরুতে এবং / বা শেষে আপনি যদি প্যাটার্নটি নোঙ্গর করতে চান না at নোট করুন যে ডাবল উদ্ধৃতিগুলির মধ্যে, সমস্ত নিয়মিত অভিব্যক্তি বিশেষ অক্ষরগুলি তাদের বিশেষ অর্থ হারিয়ে ফেলে এবং অক্ষরে অক্ষরে মিলিত হয়। এছাড়াও, নিয়মিত এক্সপ্রেশন বিশেষ অক্ষরগুলি অপারেটরের নামের নিদর্শনগুলিতে (অর্থাত্, যুক্তিটি \do) আক্ষরিক সাথে মেলে ।


6
কেবল \dtসমান \dt public.*, আমি ঠিক আছি?
হিমশীতল শিখা

কীভাবে, বলুন, একটি নির্দিষ্ট স্কিমাতে দুটি নির্দিষ্ট সারণী? পছন্দ \dt public.user_info, public.user_scope?
জেমস এম। লে

কিছু নয়, কেবল \dt public.a; \dt public.b;এক লাইনে করা সহজ do
জেমস এম। লে

এটি এক প্রকারের অন্তর্নিহিত .. \ dt যদি কেবল "পাবলিক" টেবিল দেয়, কেউ নিয়মিত প্রকাশের মাধ্যমে আরও কিছু আশা করতে পারে না ..
মেহমেট

1
নিবন্ধন করুন ডিফল্টরূপে এটি আপনার মধ্যে যা আছে তা দেখায় search_pathএবং এটি ডিফল্ট হয় "$user", public.*। ফলস্বরূপ, set search_path=s; \dtস্কিমাতে সমস্ত সারণী তালিকাবদ্ধ করতে চলেছে s
লুকাস জুহরিখ

257

আপনি টেবিলগুলি নির্বাচন করতে পারেন information_schema

SELECT * FROM information_schema.tables 
WHERE table_schema = 'public'

6
যদি আপনার ইন্টারফেস শর্টকাটগুলি সমর্থন না করে তবে খুব সহায়ক। ধন্যবাদ।
ম্যাট ব্যানার

1
এটিও দুর্দান্ত কারণ আপনি নির্বাচিত টেবিল_সেমিমা, তথ্য_চেমার টেবিল_নামের মতো কিছু করতে পারেন। টেবিলের নাম যেখানে '% যাই হোক না কেন%'; টেবিলটি কোন স্কিমাতে রয়েছে তা যদি আপনার জানা দরকার Not dt দিয়ে আপনি এটি করতে পারেন তা নিশ্চিত নন
জোশ ব্রাউন

2
আপনাকে ধন্যবাদ, এটি অ্যামাজন রেডশিফ্টে কাজ করে এবং \ dt (স্বীকৃত উত্তর) দেয় না।
কার্লোস

2
এটি সর্বাধিক কার্যকর উত্তর। তথ্য_সেমিটি এসকিউএল স্ট্যান্ডার্ডগুলিতে সংজ্ঞায়িত করা হয় এবং মেনে চলে এমন বেশিরভাগ ডাটাবেসে পাওয়া যায়
দাভোস

54

বিকল্পভাবে information_schemaএটি ব্যবহার করা সম্ভব pg_tables:

select * from pg_tables where schemaname='public';

3
নোট করুন যে আপনি যদি কেবল সারণির নাম চান তবে ফলাফলের ক্যোয়ারীটি হ'লSELECT tablename FROM pg_tables WHERE schemaname = 'public';
গ্রান্ট হ্যামফ্রিজ

স্কিমা information_schemaথেকে আইটেম তালিকাভুক্ত না করার সাথে একটি অনুমতি ইস্যু পাওয়া গেছে public, তবে pg_tablesপদ্ধতিটি দুর্দান্তভাবে কাজ করেছে। অনেক ধন্যবাদ!
জন ক্রফোর্ড

8

ভবিষ্যতে যাঁরা আসছেন তাদের জন্য:

আপনি যদি বেশ কয়েকটি স্কিমার জন্য সম্পর্কের একটি তালিকা দেখতে চান:

$psql mydatabase
mydatabase=# SET search_path TO public, usa;   #schema examples
SET
mydatabase=# \dt
              List of relations
 Schema |      Name       | Type  |  Owner
--------+-----------------+-------+----------
 public | counties        | table | postgres
 public | spatial_ref_sys | table | postgres
 public | states          | table | postgres
 public | us_cities       | table | postgres
 usa    | census2010      | table | postgres
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.