sql - 使用 oid 作为主键

标签 sql postgresql

是否可以使用 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

Furthermore, you can't use foreign key constraints on OIDs (at least this is what google tells me)

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

最佳答案

只要尝试一下,您就会知道这是否可行。答案是肯定的。 (这很不寻常,但我暂时看不出它会导致问题的原因。)

关于sql - 使用 oid 作为主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7319419/

相关文章:

java - 暂停 Android 应用程序,直到提供输入

django - 如何使用 django 确保数据库更改可以轻松地通过 DVCS 移动

database - 删除一对多关系中的空行(postgresql)

MYSQL:即使正确添加了索引,仍在使用文件排序,使用临时

sql - 如何在 Firebird 中使用 DISTINCT ON(PostgreSQL 的)?

sql - 奇怪的 ORDER BY 要求

postgresql - 在 Postgres 中首先执行函数

java - 如果我使用一个语句来选择属性,然后使用 1 个带有多个 sql 查询的准备语句,是否需要使用连接池

python - 关键 - 将查询循环转换为 1 个有趣的合并查询

php - 按行估价计算答案排序结果