2011-09-06 8 views
0

Est-il possible d'utiliser le type de données oid comme clé primaire?Utiliser l'oid comme clé primaire

CREATE TABLE "Test" 
(
    id oid NOT NULL DEFAULT nextval('"Test_id_seq"'::regclass), 
    "some" text, 
    CONSTRAINT "Test_pkey" PRIMARY KEY (id) 
) 

Je souhaite utiliser le type de données int non signé.

à DrColossos

De plus, vous ne pouvez pas utiliser les clés étrangères sur OID (au moins c'est ce que Google me dit)

CREATE TABLE "Test" 
(
    id oid NOT NULL, 
    val text NOT NULL, 
    CONSTRAINT "Test_pkey" PRIMARY KEY (id) 
); 

CREATE TABLE "Test2" 
(
    id integer NOT NULL DEFAULT nextval('"Test2_Id_seq"'::regclass), 
    "TestId" oid NOT NULL, 
    CONSTRAINT "Test2_pkey" PRIMARY KEY (id), 
    CONSTRAINT "Test2_TestId_fkey" FOREIGN KEY ("TestId") 
     REFERENCES "Test" (id) MATCH SIMPLE 
     ON UPDATE CASCADE ON DELETE RESTRICT 
); 

INSERT INTO "Test"(id, val) VALUES (1, 'one'); 
INSERT INTO "Test"(id, val) VALUES (2, 'two'); 

select * from "Test"; 

insert into "Test2" ("TestId") values (1); 
insert into "Test2" ("TestId") values (2); 
insert into "Test2" ("TestId") values (4); 

ERROR: insert or update on table "Test2" violates foreign key constraint "Test2_TestId_fkey" 
DETAIL: Key (TestId)=(4) is not present in table "Test". 

select * from "Test2"; 
+5

Si vous videz les données et les restaurez, l'utilisation des OID peut entraîner des conflits car elles sont générées automatiquement par la base de données, vous devez donc toujours pour vider avec '-o' pour s'assurer que les OID sont également exportés. De plus, vous ne pouvez pas utiliser les contraintes de clé étrangère sur les OID (du moins c'est ce que google me dit). Donc, vous devriez VRAIMENT (!) Savoir ce que vous faites si vous utilisez des OID dans votre application. – DrColossos

+0

Peut-être, le plus commun que j'ai trouvé est la possibilité de ne pas l'utiliser dans les références. Je ne sais pas comment cela se passe dans les index ou similaires. Je vous conseillerais contre un tel choix de design. – DrColossos

+0

Merci pour votre commentaire. Je ne fais que considérer la possibilité d'utiliser l'oid –

Répondre

1

Juste essayer aurait vous a dit si c'est possible. La réponse est oui. (C'est inhabituel, mais je ne vois pas pourquoi cela causerait des problèmes.)