Используйте oid в качестве первичного ключа - PullRequest
1 голос
/ 06 сентября 2011

Можно ли использовать тип данных oid в качестве первичного ключа?

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

Я хочу использовать тип данных unsigned int.

до DrColossos

Кроме того, вы не можете использовать ограничения внешнего ключа для OID (по крайней мере, это то, что говорит мне Google)

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";

1 Ответ

1 голос
/ 06 сентября 2011

Просто попытка сказала бы вам, возможно ли это. Ответ - да. (Это необычно, но случайно я не вижу причины, по которой это может вызвать проблемы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...