আমি কীভাবে একটি পোস্টগ্রিএসকিউএল টেবিলটি পরিবর্তন করব এবং একটি কলামকে অনন্য করে তুলব?


166

পোস্টগ্রিএসকিউএল-এ আমার একটি টেবিল রয়েছে যেখানে স্কিমাটি দেখতে এই রকম দেখাচ্ছে:

CREATE TABLE "foo_table" (
    "id" serial NOT NULL PRIMARY KEY,
    "permalink" varchar(200) NOT NULL,
    "text" varchar(512) NOT NULL,
    "timestamp" timestamp with time zone NOT NULL
)

এখন আমি টেবিলটি ALTER-ing করে টেবিল জুড়ে পারমালিঙ্কটি অনন্য করতে চাই। কেহ এই আমাকে সাহায্য করতে পারেন?

টিয়া


2
create unique index on foo_table (permalink)
a_horse_with_no_name

উত্তর:


270

পোস্টগ্র্রেএসকিউএল ডক্স থেকে আমি এটি আবিষ্কার করেছি, সঠিক বাক্য গঠনটি হ'ল:

ALTER TABLE the_table ADD CONSTRAINT constraint_name UNIQUE (thecolumn);

ধন্যবাদ ফ্রেড


231

অথবা, ডিবি স্বয়ংক্রিয়ভাবে একটি সীমাবদ্ধ নাম ব্যবহার করে:

ALTER TABLE foo ADD UNIQUE (thecolumn);

1
আপনি যদি এটি করেন তবে পোস্টগ্র্যাসগুলি সীমাবদ্ধতা তৈরি করতে চলেছে তবে নামটি "স্বয়ংক্রিয়ভাবে" যাচ্ছে "শব্দ" যুক্ত শব্দটি word আমি সবেমাত্র এটি চেষ্টা করেছি
সান্তি

আমি যখন উপরের সিনট্যাক্সটি ব্যবহার করি তখন পোস্টগ্র্রেস নামের সাথে নতুন কনট্রিন্ট তৈরি করে mytable_mycolumn_key আমি এতে খুশি :-)
অ্যাডাম

41

1 টিরও বেশি কলামের অনন্য সীমাবদ্ধতা তৈরি করাও সম্ভব:

ALTER TABLE the_table 
    ADD CONSTRAINT constraint_name UNIQUE (column1, column2);

এটি এমন ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE (payload::text, name);ALTER TABLE actions ADD CONSTRAINT actions_unique_constraint UNIQUE ((payload::text), name);
কিছুর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.