المعرّف الذي تولّده القاعدة يُكتب بطريقتين. serial هي القديمة الشائعة (ستراها في الكتب وفي قاعدة المتجر)، وGENERATED … AS IDENTITY هي المعيارية الحديثة في SQL وفي Oracle 12c فما بعد:
serial
GENERATED ALWAYS AS IDENTITY
المعيار
خاص بـ PostgreSQL
معيار SQL؛ موجود في Oracle أيضًا
إدخال قيمة يدويًّا
مسموح (قد يسبب تعارضًا لاحقًا)
ممنوع إلا بأمر صريح
التوصية
للقواعد القديمة
للتصاميم الجديدة
✗ خطأ
query.sql
CREATETABLE t (id intGENERATEDALWAYSASIDENTITYPRIMARYKEY, v text);INSERTINTO t (id, v) VALUES (5, 'يدوي');
✓ أُنشئ الجدول
✗ خطأ (السطر 2): cannot insert a non-DEFAULT value into column "id"
💡 تلميح: Use OVERRIDING SYSTEM VALUE to override.
✓ صواب
query.sql
CREATETABLE t (id intGENERATEDALWAYSASIDENTITYPRIMARYKEY, v text);INSERTINTO t (v) VALUES ('تلقائي');SELECT * FROM t;
✓ أُنشئ الجدول
✓ أُضيف صف واحد
النتيجة · صف واحد
id
v
1
تلقائي
ALWAYS يحمي المعرّف من الإدخال اليدوي الخاطئ.
توقّع وتحقّق
أنسب نوع لسعر منتج:
أنسب نوع لرقم جوال:
ليس عددًا تُجرى عليه عمليات.
الطريقة المعيارية لتوليد المعرّف:
المقابل في Oracle لـ varchar هو:
الخلاصة
المال numeric لا real، والتاريخ date أو timestamptz لا نص.
varchar(n) يرفض الأطول من n، و text بلا حد.
GENERATED ALWAYS AS IDENTITY معيار حديث لتوليد المعرّف (و serial القديم).