ইতোমধ্যে এটি তৈরির পরে কি আমি পোস্টগ্র্রেএসকিউএল টেবিলটিতে একটি অনন্য বাধা যুক্ত করতে পারি?


185

আমার নিম্নলিখিত টেবিল রয়েছে:

 tickername | tickerbbname  | tickertype
------------+---------------+------------
 USDZAR     | USDZAR Curncy | C
 EURCZK     | EURCZK Curncy | C
 EURPLN     | EURPLN Curncy | C
 USDBRL     | USDBRL Curncy | C
 USDTRY     | USDTRY Curncy | C
 EURHUF     | EURHUF Curncy | C
 USDRUB     | USDRUB Curncy | C

আমি চাই না যে কোনও প্রদত্ত tickername/ tickerbbnameজুটির জন্য এখানে একাধিক কলাম হোক । আমি ইতিমধ্যে টেবিলটি তৈরি করেছি এবং এতে প্রচুর ডেটা রেখেছি (যা আমি ইতিমধ্যে নিশ্চিত করেছি যে অনন্য মানদণ্ডটি পূরণ করে)। এটি বড় হওয়ার সাথে সাথে ত্রুটির জন্য জায়গাটি কমে যায়।

UNIQUEএই সময়ে কোনও বাধা যুক্ত করার কোনও উপায় আছে কি ?


উত্তর:


362

psqlএর ইনলাইন সহায়তা:

\h ALTER TABLE

পোস্টগ্রিস ডক্সেও নথিভুক্ত করা হয়েছে (একটি দুর্দান্ত উত্স, আরও পড়ার পক্ষে সহজ)।

ALTER TABLE tablename ADD CONSTRAINT constraintname UNIQUE (columns);

6
ধন্যবাদ @ হাহামু হ্যাঁ ডকগুলি চেষ্টা করে দেখলেন তবে আপনার উপরেরটি আরও সংক্ষিপ্ত।
টমাস ব্রাউন

117
আপনি যদি PostgreSQL সূচকের নামটি উত্পন্ন করতে চান তবে ব্যবহার করুন ALTER TABLE tablename ADD UNIQUE (columns);। (নোট করুন CONSTRAINTকীওয়ার্ডটি বাদ দিতে হবে))
jpmc26

5
আমার এই প্রশ্নের খুব উত্তরের প্রয়োজন ছিল এবং ডক্সের জন্য গুগলিং শুরু করলাম। পোস্টগ্র্রেস ডকুমেন্টেশনের পরিবর্তে স্ট্যাকওভারফ্লোতে আমি এই বিষয়টিতে ছড়িয়ে পড়েছি। তবে সরকারী দস্তাবেজগুলিকে উল্লেখ করার পক্ষে এটি যদি ভাল ধারণা হয় তবে ভবিষ্যতের দর্শনগুলির জন্য উত্তরটি দেওয়া খুব ভাল। এটার জন্য ধন্যবাদ.
লিওনার্ড

@ jpmc26 Post আপনি যদি PostgreSQL কে সূচকের নামটি তৈরি করতে দিতে চান »আপনি সীমাবদ্ধতার নাম বলতে চান?
tuxayo

4
@ টাক্সায়ো, পোস্টগ্র্রেসে কোনও সূচক (পেডেন্টিক না হয়ে) এর মাধ্যমে একটি অনন্য-সীমাবদ্ধতা প্রয়োগ করা হয়।
ক্রিস ডব্লিউ।

36

হ্যা, তুমি পারো. তবে আপনার টেবিলে অ-অনন্য এন্ট্রি থাকলে এটি ব্যর্থ হবে। আপনার টেবিলে কীভাবে অনন্য সীমাবদ্ধতা যুক্ত করা যায় তা এখানে। আপনি যদি PostgreSQL 9.x ব্যবহার করেন তবে নীচের নির্দেশনাটি অনুসরণ করতে পারেন।

CREATE UNIQUE INDEX constraint_name ON table_name (columns);

3
ধন্যবাদ জেক - সুন্দর 2 বছর পরে উত্তর তবে এখনও লোকেরা সময় নেয় বলে কৃতজ্ঞ! টম
টমাস ব্রাউন

1
এটি সঠিক নয়। সর্বশেষ পোস্টগ্রাসে এটি "কী (uuid) = (3a533772-07ac-4e76-b577-27a3878e2222) এর মতো বার্তায়ও অনুলিপি করা হয়েছে Qu জিজ্ঞাসা ব্যর্থ হয়েছে" যদি আপনার কাছে কোনও মূল্য নেই যা অনন্য নয় ...
স্ট্রাইন্ডার

3
@ স্ট্রিন্ডার, এটি কীভাবে ভাল জিনিস নয়? প্রথমে সদৃশ ডেটা ঠিক করুন।
জেসেন

3
@ জেসেন এটি সম্পূর্ণ পরিষ্কার। কেবল এই জবাবটি জোর দিয়ে দিতে চেয়েছিল "তবে আপনার টেবিলে যদি অনন্য-প্রবেশপথ থাকে তবে আপনার টেবিলে অনন্য সীমাবদ্ধতা কীভাবে যুক্ত করবেন তা এখানে।" কাজ করবে না. অ-অনন্য এন্ট্রি অবশ্যই অবশ্যই সর্বদা আগেই সংহত করা উচিত।
স্ট্রাইন্ডার

স্পষ্টতার জন্য উত্তরটি সম্পাদনা করা হয়েছে
জাভিয়ের হো

6

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

ALTER TABLE your_table DROP CONSTRAINT constraint_name;

নিশ্চিত করুন যে আপনি যে নতুন প্রতিবন্ধকতা যুক্ত করতে চেয়েছিলেন তা অনন্য / নাল নয় (যদি এটির মাইক্রোসফ্ট এসকিউএল থাকে তবে এটিতে কেবলমাত্র একটি নাল মান থাকতে পারে) সেই টেবিলে থাকা সমস্ত ডেটা জুড়ে এবং তারপরে আপনি এটি আবার তৈরি করতে পারেন।

ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... column_n);

5

হ্যাঁ, আপনি সত্যের পরে একটি অনন্য বাধা যুক্ত করতে পারেন। তবে আপনার টেবিলে অ-স্বতন্ত্র এন্ট্রি থাকলে পোস্টগ্র্রেস এগুলি সংশোধন না করা পর্যন্ত অভিযোগ করবে।


7
select <column> from <table> group by 1 having count(*) > 1;সদৃশ মানগুলির উপর একটি প্রতিবেদন দেবে।
জেসেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.