Hai Saya sepertinya tidak bisa mendapatkan kendala yang bekerja seperti yang saya harapkan di postgreSQL. Dari dalam pgadmin saya menjalankan query SQL berikut.
-- 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';
Ketika dieksekusi ini dikonversi menjadi.
-- 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';
Saya berharap ini akan membatasi input saya untuk kolom Jenis ke salah satu pos email IRL atau menit. Namun ketika memasukkan data tabel kendala ini gagal ketika saya memasukkan salah satu dari jenis ini. Kolom Jenis adalah tipe karakter. Adakah yang tahu cara memperbaikinya? Terima kasih.
postgresql
constraint
wookie1
sumber
sumber
CHECK (type in ('email','post','IRL','minutes')
?Jawaban:
Ubah kendala Anda menjadi
Ini akan dikonversi oleh pengurai menjadi:
Itu harus melakukan apa yang Anda lihat.
Namun saya harus bertanya-tanya apakah tidak akan lebih baik untuk melakukan ini:
Dan kemudian menambahkan kunci asing untuk menegakkan batasan tersebut. Ini akan memudahkan untuk menambahkan tipe di masa mendatang.
sumber