বর্তমান ব্যবহারকারী দ্বারা পোস্টগ্রেএসকিএল-এর মালিকানাধীন সমস্ত স্কিমায় আমি কীভাবে সমস্ত টেবিল তালিকা করব?


25

আমি সমস্ত স্কিমায় ব্যবহার করে সমস্ত টেবিল তালিকা করতে পারি

> \dt *.*

তবে এটি এমন সিস্টেম সারণীগুলিও তালিকাভুক্ত করে যা আমার সারণীগুলি যেগুলি আমার পক্ষে যত্নশীল তা ছাড়িয়ে যায়। আমি সর্বজনীন স্কিমাতে এবং আমার দ্বারা সংজ্ঞায়িত যেকোন স্কিমে আমার দ্বারা নির্মিত সমস্ত টেবিল (এবং সম্ভবত দেখা) পছন্দ করতে চাই।

আমি এখানে বর্ণিত হিসাবে এগুলি তৈরি করার সাথে সাথে স্পষ্টভাবে অনুসন্ধানের পথে স্কিমার যোগ না করে এটি করার উপায় খুঁজে প্রত্যাশা করছি:

/programming//a/12902069

সম্পাদনা করুন:

গৃহীত উত্তরের উপর ভিত্তি করে, আমি নিম্নলিখিত ভিউ তৈরি করেছি:

create view my_tables as 
select table_catalog, table_schema, table_name, table_type 
from information_schema.tables 
where table_schema not in ('pg_catalog', 'information_schema');

এবং এখন নিম্নলিখিত কমান্ডটি আমাকে যা চেয়েছিল তা দেয়:

select * from my_tables;

উত্তর:


32

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

select *
from information_schema.tables
where table_schema not in ('pg_catalog', 'information_schema')
and table_schema not like 'pg_toast%'

(আমি not like 'pg_toast%'যদিও পুরোপুরি নিশ্চিত নই যে আসলে এটির প্রয়োজন ছিল))

আমার আপনার সত্যিকার অর্থে মালিকের তথ্য প্রয়োজন, আপনার সম্ভবত ব্যবহার pg_classএবং সম্পর্কিত সারণী প্রয়োজন।

সম্পাদনা করুন: এটি এমন কোয়েরি যাতে মালিকের তথ্য অন্তর্ভুক্ত থাকে:

select nsp.nspname as object_schema,
       cls.relname as object_name, 
       rol.rolname as owner, 
       case cls.relkind
         when 'r' then 'TABLE'
         when 'm' then 'MATERIALIZED_VIEW'
         when 'i' then 'INDEX'
         when 'S' then 'SEQUENCE'
         when 'v' then 'VIEW'
         when 'c' then 'TYPE'
         else cls.relkind::text
       end as object_type
from pg_class cls
  join pg_roles rol on rol.oid = cls.relowner
  join pg_namespace nsp on nsp.oid = cls.relnamespace
where nsp.nspname not in ('information_schema', 'pg_catalog')
  and nsp.nspname not like 'pg_toast%'
  and rol.rolname = current_user  --- remove this if you want to see all objects
order by nsp.nspname, cls.relname;

এটি যথেষ্ট ভাল। আমি এ থেকে my_tables নামে একটি ভিউ তৈরি করতে যাচ্ছি।
পিটার গ্রোভস

দুর্দান্ত উত্তর, when 'm' then 'MATERIALIZED_VIEW'নতুন টাইপটি দেখানোর জন্য একটি যুক্ত করুন ।
ফোর্বসেমিস্টার

অন্য উত্তরটি সংক্ষিপ্ত হলেও, নাম স্থান বাদ দিলে এটি প্রাসঙ্গিক হতে পারে
mlt


-3

এটা দেখ. সমস্ত টেবিল:

SELECT relname FROM pg_class WHERE relname !~ '^(pg_|sql_)' AND relkind = 'r';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.