সকল টেবিলের তালিকা পিএসএকএল


125

আমি liferayআমার পোস্টগ্রিএসকিউএল ইনস্টলের ডাটাবেসে সমস্ত সারণী তালিকাবদ্ধ করতে চাই। আমি কেমন করে ঐটি করি?

আমি চালানো চাই SELECT * FROM applications;মধ্যে liferayডাটাবেস। applicationsআমার লাইফরে ডিবিতে একটি টেবিল is এটি কিভাবে হয়?

এখানে আমার সমস্ত ডাটাবেসের একটি তালিকা রয়েছে:

postgres=# \list
                              List of databases
Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
 -----------+----------+----------+-------------+-------------+-----------------------
 liferay   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | liferay=CTc/postgres
 lportal   | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 postgres  | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | 
 template0 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_GB.UTF-8 | en_GB.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(5 rows)

postgres=# 

উত্তর:


203

আপনি যদি সমস্ত সারণী তালিকাবদ্ধ করতে চান তবে আপনাকে অবশ্যই এটি ব্যবহার করুন:

\dt *.*

আপনি সমস্ত স্কিমে সমস্ত টেবিল চান তা নির্দেশ করতে । এটিতে pg_catalogটেবিলগুলি, সিস্টেম টেবিলগুলি এবং সেগুলিতে অন্তর্ভুক্ত থাকবে information_schema। "সমস্ত ব্যবহারকারীর দ্বারা সংজ্ঞায়িত স্কিমাতে সমস্ত সারণী" বলার কোনও অন্তর্নির্মিত উপায় নেই; আপনি যাইহোক, আপনার সেট করতে পারেনsearch_path চালনার আগে আগ্রহের সমস্ত স্কিমার তালিকায়\dt

আপনি এই প্রোগ্রামটিমেটিকভাবে করতে চাইতে পারেন, সেক্ষেত্রে psqlব্যাকস্ল্যাশ-আদেশগুলি কাজ করবে না do এই কোথায় রেসকিউ আসে। সারণী তালিকা করতে:INFORMATION_SCHEMA

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';

BTW, আপনি কি কখনো তা দেখতে চান তাহলে psqlএকটি ব্যাকস্ল্যাশ কমান্ড চালানোর প্রতিক্রিয়ায় করছে psqlসঙ্গে -Eপতাকা। উদাহরণ:

$ psql -E regress    
regress=# \list
********* QUERY **********
SELECT d.datname as "Name",
       pg_catalog.pg_get_userbyid(d.datdba) as "Owner",
       pg_catalog.pg_encoding_to_char(d.encoding) as "Encoding",
       d.datcollate as "Collate",
       d.datctype as "Ctype",
       pg_catalog.array_to_string(d.datacl, E'\n') AS "Access privileges"
FROM pg_catalog.pg_database d
ORDER BY 1;
**************************

সুতরাং আপনি দেখতে পাচ্ছেন যে psqlএটি অনুসন্ধান করছে pg_catalog.pg_databaseযখন এটি ডাটাবেসের একটি তালিকা পায়। একইভাবে, প্রদত্ত ডাটাবেসের মধ্যে সারণীর জন্য:

SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' THEN 'foreign table' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ('r','')
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;

এসকিউএল-স্ট্যান্ডার্ড, INFORMATION_SCHEMAপজি সিস্টেম ক্যাটালগগুলির পরিবর্তে পোর্টেবল যেখানে সম্ভব সেখানে ব্যবহার করা ভাল, তবে কখনও কখনও আপনার পিজি-নির্দিষ্ট তথ্য প্রয়োজন। এই ক্ষেত্রে সিস্টেম ক্যাটালগগুলি সরাসরি জিজ্ঞাসা করা ভাল, এবং psql -Eকীভাবে এটি করা যায় তার জন্য সহায়ক গাইড হতে পারে।


information_schema.tablesকিছু কারণে মতামত অন্তর্ভুক্ত। (পোস্টগ্রিএসকিউএল 9.2 তে, যাইহোক।)
jpmc26

@ jpmc26 হ্যাঁ, table_type = 'VIEW'তাই, এগুলি বাদ দেওয়া সহজ। সাধারণভাবে এসকিউএল যতটা সম্ভব সারণী হিসাবে একই মতামতগুলির আচরণ করার চেষ্টা করে।
ক্রেগ রিঞ্জার

94

ডাটাবেসের সাথে সংযুক্ত করুন, তারপরে সারণীগুলি তালিকাবদ্ধ করুন:

\c liferay
\dt

যেভাবেই হোক আমি এটি করি।

আপনি যদি পছন্দ করেন তবে আপনি দুটি কমান্ড একক লাইনে একত্রিত করতে পারেন:

\c liferay \dt

2
আপনার \dt *.*আগ্রহের সমস্ত টেবিল যদি না থাকে তবে আপনি প্রকৃতপক্ষে চান search_path
ক্রেগ রিঞ্জার

10

পাবলিক টেবিলগুলি দেখতে আপনি করতে পারেন

তালিকা সারণী

\dt

তালিকা টেবিল, দেখুন এবং অ্যাক্সেস সুযোগ

\dp or \z

বা কেবল টেবিলের নাম

select table_name from information_schema.tables where table_schema = 'public';

2

এসকিউএল ক্যোয়ারিতে আপনি এই কোডটি লিখতে পারেন:

select table_name from information_schema.tables where table_schema='YOUR_TABLE_SCHEME';

আপনার টেবিল স্কিমটি YOUR_TABLE_SCHEME দিয়ে প্রতিস্থাপন করুন;

উদাহরণ:

select table_name from information_schema.tables where table_schema='eLearningProject';

সমস্ত স্কিম এবং সমস্ত টেবিল দেখতে, যেখানে ধারাটির প্রয়োজন নেই:

select table_name from information_schema.tables

1

একটি লাইন উদাহরণ

\dt schemaname.* 

আপনার সেনারিওতে

\dt public.*

0

আপনার যদি সমস্ত স্কিমে সমস্ত টেবিলের প্রয়োজন না হয় তবে এটি অটোমেশন স্ক্রিপ্টগুলিতে ব্যবহার করা যেতে পারে:

  for table in $(psql -qAntc '\dt' | cut -d\| -f2); do
      ...
  done

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