পোস্টগ্রিসে একটি বস্তুগত দর্শন সংজ্ঞা জিজ্ঞাসা করুন


21

আমি ভাবছি পোস্টগ্রিসে কোনও বস্তুগত দৃশ্যের সংজ্ঞা কীভাবে জিজ্ঞাসা করব। রেফারেন্সের জন্য, আমি যা করতে বলেছিলাম তা নিয়মিত দেখার জন্য আপনি যা করতে পারেন তার সাথে খুব মিল:

SELECT * FROM information_schema.views WHERE table_name = 'some_view';

যা আপনাকে নিম্নলিখিত কলামগুলি দেয়:

table_catalog
table_schema
table_name
view_definition
check_option
is_updatable
is_insertable_into
is_trigger_updatable
is_trigger_deletable
is_trigger_insertable_into

বস্তুগত দর্শনগুলির জন্য এটি কি সম্ভব?

আমার গবেষণা থেকে এখন পর্যন্ত এটি প্রতীয়মান হয়েছে যে জড়িত মতামতগুলি ইচ্ছাকৃতভাবে তথ্য_স্কেম থেকে বাদ দেওয়া হয়েছে, কারণ

তথ্য_সেমিমা কেবল এসকিউএল স্ট্যান্ডার্ডে বিদ্যমান অবজেক্টগুলি প্রদর্শন করতে পারে।

( http://www.postgresql.org/message-id/3794.1412980686@sss.pgh.pa.us )

যেহেতু তারা তথ্য_সেমিমা থেকে পুরোপুরি বাদ পড়েছে বলে মনে হচ্ছে, কীভাবে এটি করবেন তা নিশ্চিত নই, তবে আমি যা করতে চাই তার দ্বিগুণ:

  1. নির্দিষ্ট উপাদানযুক্ত দর্শন বিদ্যমান কিনা তা অনুসন্ধান করুন। (এখন পর্যন্ত আমি কেবল এটিই পেয়েছি যে একই নামটি সহ মাদুর দৃষ্টিভঙ্গি তৈরি করার চেষ্টা করুন এবং দেখুন এটি ফুটে উঠেছে কিনা))
  2. এবং তারপরে বস্তুগত দৃশ্যের সংজ্ঞাটি জিজ্ঞাসা করুন (উপরের view_definitionকলামের অনুরূপ information_schema.views)।

বস্তুগত দৃষ্টিতে অনন্য বাধার জন্য কোয়েরি
বিন দ্য বিয়ান ২

আপনি অস্তিত্ব পরীক্ষা করার দ্রুত উপায়টিতে আগ্রহী হবেন: SELECT to_regclass('some_schema.some_mat_view')- যদি খুঁজে পাওয়া যায় তবে এটি এমভি হতে হবে না, যদিও। বিশদ: স্ট্যাকওভারফ্লো.com
এরউইন ব্র্যান্ডস্টেটর

উত্তর:



13

দেখা যাচ্ছে এটি এতটা জটিল ছিল না যতটা ভেবেছিলাম! (পিজি_ ক্যাটালগের সামান্য জ্ঞানের সাথে ...)

পর্ব 1: একটি বস্তুগত দৃশ্যের উপস্থিতি আছে কিনা তা অনুসন্ধান করুন:

SELECT count(*) > 0
FROM pg_catalog.pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'm'
AND n.nspname = 'some_schema'
AND c.relname = 'some_mat_view';

সুন্দর এবং সহজ.

পার্ট 2: একটি বস্তুগত দর্শনটির সংজ্ঞা জিজ্ঞাসা করুন:

মাদুর দর্শনের সংজ্ঞাটি পেতে একটি ক্যোয়ারী নিয়ে আসার জন্য, প্রথমে আমাকে information_schema.viewsচালনার মাধ্যমে সংজ্ঞাটির সংজ্ঞাটি সন্ধান করতে হবে :

SELECT view_definition
FROM information_schema.views
WHERE table_schema = 'information_schema'
AND table_name = 'views';

তারপর আমি ক্যোয়ারী আউট অনুলিপি এবং পরিবর্তিত c.relkind = 'v'::"char"করা c.relkind = 'm'::"char"অর্ডার মাদুর দর্শনগুলি (নিয়মিত মতামত পরিবর্তে) পেতে হবে। এখানে পূর্ণ কোয়েরি দেখুন: http://pastebin.com/p60xwfes

এই মুহুর্তে আপনি AND c.relname = 'some_mat_view'সংজ্ঞাটি পেতে এটি সহজেই যুক্ত করতে এবং চালাতে পারেন some_mat_view

তবে আপনি পরবর্তী সময়ে যখন কোনও মাদুর দর্শনের সংজ্ঞাটি দেখতে চান তখন আপনাকে আবারও এটি করতে হবে ...

বোনাস: এটিকে আরও সহজ করার জন্য একটি দৃশ্য তৈরি করুন

ভবিষ্যতে ম্যাট ভিউ সংজ্ঞাটি সন্ধান করা আরও সহজ করার জন্য আমি একটি নতুন ভিউ তৈরির বিকল্প বেছে নিয়েছি। CREATE VIEW materialized_views ASনতুন ভিউ তৈরি করতে আমি মূলত উপরে লিঙ্ক করা ক্যোয়ারির শুরুতে যুক্ত করেছি, এবং এখন আমি এটি এর মতো প্রশ্ন করতে পারি:

SELECT *
FROM materialized_views
WHERE table_schema = 'some_schema'
AND table_name = 'some_mat_view';

অনেক ভাল!

পরিবর্তিত *হয়ে কোনও বস্তুগত দর্শন বিদ্যমান কিনা তা সহজেই জিজ্ঞাসা করতে আমি এই ভিউটিও ব্যবহার করতে পারি count(*) > 0

দাবি অস্বীকার : আমি জানি না যে ক্যোয়ারী ফলাফলের অন্যান্য কলামগুলি সম্পূর্ণরূপে সঠিক, যেহেতু বস্তুগত দৃষ্টিভঙ্গি স্ট্যান্ডার্ড দর্শন থেকে মৌলিকভাবে পৃথক (আমি মনে করি এগুলি সঠিক)। কিন্তু এই অন্তত ক্যোয়ারী করে table_schema, table_nameএবং view_definitionসঠিকভাবে।


0

এখানে অন্যান্য উত্তরের সাথে ত্রুটিটি হ'ল আপনি কেবল এসকিউএল সংজ্ঞা পান, বেশিরভাগ ক্ষেত্রেই আপনি আসল কলামগুলিতে আগ্রহী হন এবং সেগুলি পাঠ্য হিসাবে পরিচালনা করতে সক্ষম হন। নীচে একটি অনুরূপ প্রশ্ন থেকে আমার উত্তর দেওয়া হয়েছে , যার মধ্যে কলামের নাম এবং ডেটাটাইপ রয়েছে:

আমি অন্তর্নিহিত ডেটা মডেলটি সম্পূর্ণরূপে বুঝতে পারি তা বলতে পারি না, সুতরাং নীচে আমার সমাধানটি লবণের দানা দিয়ে ব্যবহার করুন:

select 
    ns.nspname as schema_name, 
    cls.relname as table_name, 
    attr.attname as column_name,
    trim(leading '_' from tp.typname) as datatype
from pg_catalog.pg_attribute as attr
join pg_catalog.pg_class as cls on cls.oid = attr.attrelid
join pg_catalog.pg_namespace as ns on ns.oid = cls.relnamespace
join pg_catalog.pg_type as tp on tp.typelem = attr.atttypid
where 
    ns.nspname = 'your_schema' and
    cls.relname = 'your_materialized_view' and 
    not attr.attisdropped and 
    cast(tp.typanalyze as text) = 'array_typanalyze' and 
    attr.attnum > 0
order by 
    attr.attnum

আপনাকে পরিবর্তন করতে হবে 'your_schema'এবং 'your_materialized_view'

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