পোস্টগ্রিএসকিউএল-তে এসকিউএল-এ সমস্ত দর্শন তালিকাভুক্ত করবেন কীভাবে?


40

পোস্টগ্রিএসকিউএল-তে একটি এসকিউএল কমান্ড ব্যবহার করে আমি কীভাবে একটি ডেটাবেসের জন্য সমস্ত দর্শন তালিকাভুক্ত করব?

আমি পিএসকিএল \dvকমান্ডের আউটপুট অনুরূপ কিছু চাই , তবে কেবলমাত্র নামের নামের একটি তালিকা। যেমন,

SELECT ...;
my_view_1
my_view_2
my_view_3

আমি উবুন্টু লিনাক্সে পোস্টগ্রিজ এসকিউএল v9.1.4 চালাচ্ছি।


আপনি একটি উত্তর চয়ন করতে পারেন?
ইভান ক্যারল

উত্তর:


42

ডকুমেন্টেশন থেকে :

 select table_name from INFORMATION_SCHEMA.views;

যদি আপনি না চান তবে সিস্টেমের দৃষ্টিভঙ্গি আপনার ফলাফল, এই চেষ্টা করুন:

 select table_name from INFORMATION_SCHEMA.views WHERE table_schema = ANY (current_schemas(false))

ধন্যবাদ @ ফিল। যাইহোক, এই কমান্ডটি 128 সারি প্রদান করে, যখন \ dv 57 টি সারি দেয়। দেখে মনে হচ্ছে এটিও আমাকে সিস্টেম ভিউ দিচ্ছে, যেমন "টেবিল", "কলাম", "ডোমেনস", "পিজি_রোল" ইত্যাদি I আমি কীভাবে আমার তৈরি দর্শনগুলি পেতে পারি?
রব বেদনার্ক

এটি আপনাকে যেগুলি অ্যাক্সেস করেছে তার একটি তালিকা দেয়। প্রদত্ত স্কিমাটি where table_schema='USERNAME'পেতে, ক্যোয়ারিতে যুক্ত করুন
ফিলিপ ᵀᴹ

@ ফিল ফিল্ডটি কেবল তখনই ব্যবহার করে যদি ব্যবহারকারীর জন্য অভিন্নরূপে কোনও স্কিমার নামকরণ করা হয়। ডিফল্টরূপে এটি হয় না, তবে publicস্কিমা রয়েছে।
dezso

1
INFORMATION_SCHEMA.views কেবলমাত্র বর্তমান ব্যবহারকারীর ডান (গুলি) রয়েছে তা দেখায়। ডাটাবেসে যদি এমন কোনও মতামত থাকে যা বর্তমান ব্যবহারকারীর ডান (গুলি) না থাকে তবে সেই মতামতের নাম ফলাফলের মধ্যে প্রদর্শিত হবে না। @ ফিলের লিঙ্কে থাকা দস্তাবেজ থেকে: কেবলমাত্র সেই মতামতগুলি দেখানো হয়েছে যে বর্তমান ব্যবহারকারীর অ্যাক্সেস রয়েছে (মালিক হওয়ার উপায় বা কোনও সুযোগ সুবিধা পাওয়ার কারণে)।
কাও মিন তু

21

আপনি pg_catalog.pg_viewsআপনার পছন্দসই তথ্যের জন্য জিজ্ঞাসা করতে পারেন :

select viewname from pg_catalog.pg_views;

স্কিমার নাম পেতেও সংশোধিত ক্যোয়ারী - কেবলমাত্র যদি আপনি বিভিন্ন স্কিমায় একই নামের সাথে একাধিক মতামত রাখেন - এবং সেই সিস্টেমের দর্শনগুলি বাদ দিয়েছেন:

select schemaname, viewname from pg_catalog.pg_views
where schemaname NOT IN ('pg_catalog', 'information_schema')
order by schemaname, viewname;

এই প্রোগ্রামটিতে, এই ভাবে আমার বিবৃত কারণে ক্যোয়ারী INFORMATION_SCHEMA.views বেশী ভালো মন্তব্য করতে ফিল এর উত্তর


4

আপনার কেবল যদি অভ্যন্তরীণভাবে এটির প্রয়োজন হয় তবে আপনি দর্শন প্রদর্শন psqlকরতে \dv, বা \dmবস্তুগত দর্শনগুলির জন্যও ব্যবহার করতে পারেন । বা এর সাথে ব্যবহার করুন +, \dm+উদাহরণস্বরূপ কিছু অতিরিক্ত তথ্য দেখানোর জন্য (বেশিরভাগ ম্যাটারিয়াল ভিউ আকার দেখতে দরকারী)।


1
\dv *.*এবং \dm *.* সমস্ত স্কিমায় সেই তথ্যের জন্য!
পাক

3

চেষ্টা করুন:

SELECT  n.nspname AS table_schema,
        pg_catalog.pg_get_userbyid(c.relowner) AS table_owner,
        c.relname AS table_name
    FROM pg_catalog.pg_class c
         LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
    WHERE c.relkind  = 'v'
;

আপনি যদি আরও বিশদ চান তবে আপনার প্রয়োজন অনুসারে নিম্নলিখিতগুলি সংশোধন করতে পারেন:

SELECT  n.nspname AS table_schema,
        pg_catalog.pg_get_userbyid(c.relowner) AS table_owner,
        c.relname AS table_name,
        s.n_live_tup AS row_count,
        count (a.attname) AS column_count,
        pg_catalog.obj_description(c.oid, 'pg_class') AS comments,
        CASE c.relkind
            WHEN 'v'
            THEN pg_catalog.pg_get_viewdef(c.oid, true)
            ELSE null
            END AS query
    FROM pg_catalog.pg_class c
         LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
         LEFT JOIN pg_catalog.pg_attribute a ON (c.oid = a.attrelid AND a.attnum > 0 AND NOT a.attisdropped)
         LEFT JOIN pg_catalog.pg_stat_all_tables s ON (c.oid = s.relid)
    WHERE c.relkind  = 'v'
GROUP BY n.nspname,
        c.relowner,
        c.relkind,
        c.relname,
        s.n_live_tup,
        c.oid
ORDER BY n.nspname,
        c.relname
;

2

আমি এর viewএকটি ক্যাটালগ তালিকা করতে একটি তৈরি করেছি views:

create or replace view show_views as 
select table_name from INFORMATION_SCHEMA.views 
WHERE table_schema = ANY (current_schemas(false));

এবং আমি যখন লিখি সেই ডাটাবেসে সমস্ত দর্শন দেখতে চাই:

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