Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用oid作为主键_Sql_Postgresql - Fatal编程技术网

Sql 使用oid作为主键

Sql 使用oid作为主键,sql,postgresql,Sql,Postgresql,是否可以使用oid数据类型作为主键 CREATE TABLE "Test" ( id oid NOT NULL DEFAULT nextval('"Test_id_seq"'::regclass), "some" text, CONSTRAINT "Test_pkey" PRIMARY KEY (id) ) 我想使用无符号int数据类型 给格罗索斯医生 此外,您不能在OID上使用外键约束(至少这是google告诉我的) 只要试一下就会告诉你这是否可能。答案是肯定的。(这很不寻常,但

是否可以使用oid数据类型作为主键

CREATE TABLE "Test"
(
  id oid NOT NULL DEFAULT nextval('"Test_id_seq"'::regclass),
  "some" text,
  CONSTRAINT "Test_pkey" PRIMARY KEY (id)
)
我想使用无符号int数据类型

给格罗索斯医生

此外,您不能在OID上使用外键约束(至少这是google告诉我的)


只要试一下就会告诉你这是否可能。答案是肯定的。(这很不寻常,但我不知道它会引起问题的原因。)

只要尝试一下,就会告诉你这是否可能。答案是肯定的。(这很不寻常,但我不知道它会导致问题的原因。)

如果转储数据并还原数据,使用OID可能会导致冲突,因为它们是由DB自动生成的,因此您始终需要使用
-o
转储,以确保OID也被导出。此外,您不能在OID上使用外键约束(至少这是google告诉我的)。因此,如果你在应用程序中使用OID,你应该真正(!)知道你在做什么。也许,我发现最常见的是在引用中不使用OID。不确定它在索引或类似文件中的作用。我建议您不要选择这样的设计。谢谢您的评论。我正在考虑使用OID的可能性,问问自己为什么要使用OID,而不仅仅是整数或bigint。@否,我想使用无符号int数据类型。postgresql不提供无符号数据类型。如果转储数据并还原数据,使用OID可能会导致冲突,因为它们是由DB自动生成的,因此您始终需要使用
-o
转储以确保OID也被导出。此外,您不能在OID上使用外键约束(至少这是google告诉我的)。因此,如果你在应用程序中使用OID,你应该真正(!)知道你在做什么。也许,我发现最常见的是在引用中不使用OID。不确定它在索引或类似文件中的作用。我建议您不要选择这样的设计。谢谢您的评论。我正在考虑使用OID的可能性,问问自己为什么要使用OID,而不仅仅是整数或bigint。@否,我想使用无符号int数据类型。postgresql不提供无符号数据类型。
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";