কয়েকটি আলাদা স্ট্রিংয়ে ইনপুট সীমাবদ্ধ করুন


12

হাই, পোস্টগ্রিএসকিউএল-তে আমি যেভাবে প্রত্যাশা করি সেভাবে কাজ করার মতো প্রতিবন্ধকতা পেতে পারি না। প্যাগাডমিনের মধ্যে থেকে আমি নিম্নলিখিত এসকিউএল কোয়েরি সম্পাদন করি।

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';

মৃত্যুদন্ড কার্যকর করা হলে এটি রূপান্তরিত হয়।

-- Check: "TypeCheck"

-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";

ALTER TABLE "ComLog"
  ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';

আমি প্রত্যাশা করি এটি টাইপ কলামের জন্য আমার ইনপুটটি ইমেল পোস্ট আইআরএল বা মিনিটের একটিতে সীমাবদ্ধ রাখবে। সারণীর ডেটা প্রবেশ করার সময় আমি যখন এই ধরণের একটি প্রবেশ করি তখন এই সীমাবদ্ধতা ব্যর্থ হয়। প্রকারের কলামটি চরিত্রের ধরণের। কেউ কীভাবে এটি ঠিক করতে জানেন। ধন্যবাদ।


3
যদি না আমি কিছু বুঝতে না পারি, এমন কোনও কারণ আছে যা পড়া পড়া খুব সহজ হবে না CHECK (type in ('email','post','IRL','minutes')?
rfusca

উত্তর:


16

আপনার বাধা পরিবর্তন করুন

CHECK (type IN ('email','post','IRL','minutes'))

এটি পার্সার দ্বারা রূপান্তরিত হবে:

CHECK (type = ANY( ARRAY['email','post','IRL','minutes']))

এটি আপনি যা দেখছেন তা করা উচিত।

তবে আমাকে ভাবতে হবে যে এটি করা ভাল না হলে:

CREATE TABLE comlog_types (
     type text
);

এবং তারপরে সীমাবদ্ধতা প্রয়োগ করতে একটি বিদেশী কী যুক্ত করুন। এটি ভবিষ্যতে প্রকারগুলি যুক্ত করা সহজ করবে।


ধন্যবাদ, এটি পুরোপুরি সমাধান হয়েছে। ভবিষ্যতে আমি বিদেশী কী পদ্ধতিতে পরিবর্তনের বিষয়টি দেখতে চাই।
wookie1

2
হ্যাঁ, এটি দুর্দান্তভাবে কাজ করে। তবে আপনি PostgreSQL এর এনাম ডাটা টাইপটিও দেখতে চাইতে পারেন ।
XåpplI'-I0llwlg'I -
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.