Postgresql এ একটি নির্দিষ্ট কলামযুক্ত একটি টেবিলটি কীভাবে খুঁজে পাবেন


95

আমি PostgreSQL 9.1 ব্যবহার করছি। আমার একটি টেবিলের কলামের নাম আছে। এই কলামটি থাকা / টেবিলগুলি খুঁজে পাওয়া কি সম্ভব? যদি তাই হয়, কিভাবে?

উত্তর:


65

আপনি সিস্টেম ক্যাটালগগুলি জিজ্ঞাসা করতে পারেন :

select c.relname
from pg_class as c
    inner join pg_attribute as a on a.attrelid = c.oid
where a.attname = <column name> and c.relkind = 'r'

sql fiddle demo


4
দ্রষ্টব্য যে এই কোয়েরিটি '%' ওয়াইল্ডকার্ড গ্রহণ করবে বলে মনে হচ্ছে না, যখন রাবির উত্তরের ক্যোয়ারী করেছে।
স্কিপি লে গ্র্যান্ড গৌরু

@ স্কিপাইলগ্র্যান্ড গৌরোগ এটি "আইডি%" এর মতো "গ্রহণ করে
জটকি

এটি ওয়াইল্ডকার্ডের সাথে বা ছাড়াই আমার পক্ষে কাজ করে না, আমাকে অনুসন্ধানের জন্য
তথ্য.চেমি

150

আপনি করতে পারেন

 select table_name from information_schema.columns where column_name = 'your_column_name'

4
অদ্ভুতভাবে, আমি উদাহরণগুলি দেখেছি যেখানে এই কোয়েরিতে টেবিলগুলি দেখায় যা @ রোমানপেকারের ক্যোয়ারী নয়; আমি ভাবছি কেন এমন হবে
কেন বেলোস

4
@KenBellows আমি অনুমান করি pg_class / pg_attirbute পোস্টগ্র্যাস্কিলের নতুন সংস্করণে পরিবর্তন করতে পারে যখন তথ্য_স্কেমা এএনএসআই নির্দিষ্টকরণে সংজ্ঞায়িত করা হয়। সুতরাং সাধারণ প্রশ্নের জন্য আমি বলব এই উত্তরটি আরও ভাল। কখনও কখনও আমার উদাহরণস্বরূপ আইডি থাকা দরকার, এক্ষেত্রে আমার ডিবি-ইঞ্জিন নির্দিষ্ট সারণী ব্যবহার করা উচিত। এছাড়াও, তথ্য_স্কেমা দর্শনগুলি সর্বদা ডিবি ইঞ্জিনের নির্দিষ্ট টেবিলগুলির উপর একটি অতিরিক্ত পদক্ষেপ এবং কখনও কখনও একটি (সামান্য) খারাপ প্রতিক্রিয়া হতে পারে
রোমান পেকার

আমার ক্ষেত্রে এটি দেওয়া দুটি সমাধানের মধ্যে এটি আরও সঠিক। Pg_class ক্যোয়ারী দুটি (150 এর) টেবিল মিস করেছে। তথ্য_স্কেমা ক্যোয়ারী সমস্ত সারণী ক্যাপচার করেছে। জোড়ার বাইরে দুটি টেবিল কেন পড়েছে তা দেখতে আমাকে প্রায় খনন করতে হবে। কোনও ইভেন্টে তথ্যের জন্য ধন্যবাদ!
থমাস অল্টফাদার গুড

7

আমি @ রোমান পেকারের ক্যোয়ারিকে বেস হিসাবে ব্যবহার করেছি এবং স্কিমা নাম যুক্ত করেছি (আমার ক্ষেত্রে প্রাসঙ্গিক)

select n.nspname as schema ,c.relname
    from pg_class as c
    inner join pg_attribute as a on a.attrelid = c.oid
    inner join pg_namespace as n on c.relnamespace = n.oid
where a.attname = 'id_number' and c.relkind = 'r'

sql fiddle demo


1

কেবল:

$ psql mydatabase -c '\d *' | grep -B10 'mycolname'

প্রয়োজনে টেবিলের নাম পেতে বড় করুন -বি অফসেট করুন


1

ওয়াইল্ডকার্ড সমর্থন টেবিল স্কিমা এবং সারণীর নাম সন্ধান করুন যাতে আপনি খুঁজতে চান এমন স্ট্রিং রয়েছে।

select t.table_schema,
       t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name
                                and c.table_schema = t.table_schema
where c.column_name like '%STRING%'
      and t.table_schema not in ('information_schema', 'pg_catalog')
      and t.table_type = 'BASE TABLE'
order by t.table_schema;

0
select t.table_schema,
       t.table_name
from information_schema.tables t
inner join information_schema.columns c on c.table_name = t.table_name 
                                and c.table_schema = t.table_schema
where c.column_name = 'name_colum'
      and t.table_schema not in ('information_schema', 'pg_catalog')
      and t.table_type = 'BASE TABLE'
order by t.table_schema;

4
আপনার কোডের জন্য একটি ব্যাখ্যা অন্তর্ভুক্ত করতে দয়া করে আপনার উত্তরটি সম্পাদনা করুন । প্রশ্নটি ছয় বছরেরও বেশি পুরানো এবং ইতিমধ্যে বেশ কয়েকটি উত্তম, ভালভাবে ব্যাখ্যা করা উত্তরগুলির পাশাপাশি ইতিমধ্যে একটি স্বীকৃত উত্তর রয়েছে। আপনার উত্তরের এ জাতীয় ব্যাখ্যা ছাড়াই এটি ডাউনভোট বা সরানো হবে। অতিরিক্ত তথ্য যুক্ত করা আপনার উত্তরের অবিরত অস্তিত্ব এখানে ন্যায়সঙ্গত করতে সহায়তা করবে।
দাস_গীক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.