সমস্ত টেবিলের জন্য প্রাথমিক কীগুলি তালিকাভুক্ত করুন - পোস্টগ্র্যাস্কিল


14

এমন কোনও জিজ্ঞাসা আছে যা তা করবে?

আমি এমন কিছু প্রশ্নের সন্ধান পেয়েছি যা এক টেবিলের জন্য এটি করতে পারে তবে আমি এটি সংশোধন করতে সক্ষম হইনি যাতে আমি দেখতে পারি:

tablename | column | type

1
যদি আমি এটি জিজ্ঞাসা করছিলাম তবে আমি পিকে কোনও কলামের অর্ডিনাল অবস্থানটি জানতে চাই (কিছু পিকেগুলিতে 1 টিরও বেশি কলাম রয়েছে এবং অর্ডার বিষয়টি বিবেচনা করতে পারে)।
ypercubeᵀᴹ

উত্তর:


13

এটার মতো কিছু:

select tc.table_schema, tc.table_name, kc.column_name
from information_schema.table_constraints tc
  join information_schema.key_column_usage kc 
    on kc.table_name = tc.table_name and kc.table_schema = tc.table_schema and kc.constraint_name = tc.constraint_name
where tc.constraint_type = 'PRIMARY KEY'
  and kc.ordinal_position is not null
order by tc.table_schema,
         tc.table_name,
         kc.position_in_unique_constraint;

এই ক্যোয়ারীটি কেবল প্রাথমিক কীগুলিই নয় অনন্য সূচিগুলিও দেখায়
মাইকে নিক্লাস

@ MichałNiklas এটি করেন না।
dezso

1
@ দরিয়েলপ্রথম: শর্তটি tc.constraint_type = 'PRIMARY KEY'কেবল প্রাথমিক কীগুলি দেখায়। তবে প্রতিটি প্রাথমিক কীটি অনন্য সূচক দ্বারা সমর্থিত
a_horse_with_no_name

2
@ a_horse_with_no_name আমি বিশ্বাস করি এটি ভুল। position_in_unique_constraintবিদেশী কী এর অবস্থান নির্দেশ করে, এটি প্রাথমিক কীগুলির জন্য সর্বদা শূন্য থাকে। সঠিক কলামটি হ'ল ordinal_position। পিজি 9.4 তে পরীক্ষা করা হয়েছে।
Greatvovan

1
@a_horse_with_no_name আমি বেনামী ব্যবহারকারীর দ্বারা প্রস্তাবিত একটি সম্পাদনা অনুমোদিত করেছি। নিশ্চিত না যে সম্পাদনাটি হবে কিনা, অন্যরা প্রত্যাখ্যান করেছে। যে কোনও ক্ষেত্রে দয়া করে পরামর্শ এবং মহানভোভানের উপরের মন্তব্যটি দেখুন। আমি মনে করি সেগুলি সঠিক এবং ordinal_positionব্যবহার করা উচিত। এটি কেবল position_in_unique_constraintএফকে ব্যবহারের ক্ষেত্রে বাতিল নয়।
ypercubeᵀᴹ

20

এটি আরও সঠিক উত্তর:

select tc.table_schema, tc.table_name, kc.column_name 
from  
    information_schema.table_constraints tc,  
    information_schema.key_column_usage kc  
where 
    tc.constraint_type = 'PRIMARY KEY' 
    and kc.table_name = tc.table_name and kc.table_schema = tc.table_schema
    and kc.constraint_name = tc.constraint_name
order by 1, 2;

আপনি and kc.constraint_name = tc.constraint_nameঅংশটি মিস করেছেন , সুতরাং এটি সমস্ত বাধাগুলি তালিকাবদ্ধ করে।


2
আপনার জিজ্ঞাসাটি কাজ করার সময়, আরও গুরুত্বপূর্ণ পার্থক্যটি হ'ল and kc.position_in_unique_constraint is not nullঅংশটি। এবং আপনাকে এএনএসআই যোগগুলিকে ব্যবহার করার জন্য দৃ strongly়ভাবে উত্সাহ দেওয়া হয়েছে (যদিও অনেকে একে স্বাদের বিষয় হিসাবে বিবেচনা করে)।
dezso

1

দয়া করে এটিও বিবেচনা করুন। এটি সমস্ত সারণী পরিবর্তন করতে স্ক্রিপ্ট তৈরি করবে।

SELECT STRING_AGG(FORMAT('ALTER TABLE %s CLUSTER ON %s;', A.table_name, A.constraint_name), E'\n') AS SCRIPT
FROM
(
    SELECT      FORMAT('%s.%s', table_schema, table_name) AS table_name, constraint_name
    FROM        information_schema.table_constraints
    WHERE       UPPER(constraint_type) = 'PRIMARY KEY'
    ORDER BY    table_name 
) AS A;

টেবিলগুলি কীভাবে পরিবর্তন করা যায় তা প্রশ্ন জিজ্ঞাসা করে না।
ypercubeᵀᴹ

1
আমি দ্বিতীয়টি যা করছি @ ইয়পারক्यूबᵀᴹসেসে। এই উত্তরটি মুছুন, তবে নিরুৎসাহিত হবেন না - ট্যুরটি নিন, সহায়তা কেন্দ্রটি দেখুন এবং ব্লগ "আপনাকে সহায়তা করতে আমাদের সহায়তা করুন" tbe পড়ুন। জিজ্ঞাসা করা হয়নি এমন কিছু উত্তর দেওয়ার জন্য, আমরা সকলেই প্রচুর সময় :-) করেছি। PS ফোরামে স্বাগতম!
ভেরেস

1

আমি মনে করি প্রাথমিক কী এবং বিদেশী কীটি এইভাবে করা উচিত। কেসি.পজিশন_ইন_উনিক_কন্ট্রেন্টটি শূন্য নয় এই শর্তটি কেবল বিদেশী কী পেতে পারে।

select tc.table_schema, tc.table_name, kc.column_name,tc.constraint_type
from 
    information_schema.table_constraints tc
    JOIN information_schema.key_column_usage kc 
        on kc.table_name = tc.table_name and kc.table_schema = tc.table_schema 
                and kc.constraint_name = tc.constraint_name
where 
--kc.position_in_unique_constraint is not null
order by tc.table_schema,
         tc.table_name,
         kc.position_in_unique_constraint;

আমি এই জাতীয় কিছু করার চেষ্টা করছি (টেবিলের নামগুলি কিছুটা আলাদা, সম্ভবত আমি পোস্টগ্রিজের ভিন্ন সংস্করণে আছি)। ক্যোয়ারী চলে তবে আমি আর কোনও ফল পাই না। এটা কি সম্ভব যে আমার সঠিক অনুমতি নেই-?
szeitlin
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.