1

我有一个带有以下方案的简单表格:

CREATE TABLE dateien(
    id int PRIMARY KEY UNIQUE DEFAULT NEXTVAL('dateien_id_seq'),
    name varchar(64),
    zeit timestamp DEFAULT now(),
    groesse float,
    dateityp_id int references dateitypen(id),
    benutzer_id int references benutzer(id)
);

当尝试通过 phppgadmin 删除一行时,我总是收到以下消息: No unique identifier for this row.

同样通过纯sql删除语句后没有效果。你能告诉我问题是什么吗?

4

2 回答 2

1

啊该死的...我发现了错误。我忘了提一个在这张桌子上也很活跃的触发器。触发器是:

CREATE TRIGGER update_quota BEFORE INSERT OR UPDATE OR DELETE
ON dateien
FOR EACH ROW
EXECUTE PROCEDURE f_update_quota();

但是在删除时我返回了一些错误。这就是为什么它不起作用。

于 2012-06-19T08:42:01.453 回答
0

我看不到引用的表是如何创建的。

dateityp_id int references dateitypen(id),
benutzer_id int references benutzer(id)

因此,我只能猜测......,作为一个例子。表产品、订单、日期。

如果在创建引用该产品的订单后删除该产品怎么办?SQL 也允许您指定它。直观地说,我们有几个选择:

  • 不允许删除引用的产品。
  • 也删除订单
  • 还有什么?

当有人想要删除仍被订单引用的产品时(通过 dateien),我们不允许这样做。如果有人删除了一个订单,那么 dateien 也会被删除。

product_no integer REFERENCES products ON DELETE RESTRICT,
order_id integer REFERENCES orders ON DELETE CASCADE,

限制和级联删除是两个最常见的选项。RESTRICT 也可以写成 NO ACTION,如果你没有指定任何东西,它也是默认的。对于删除主键时外键列应该发生的情况,还有另外两个选项:SET NULL 和 SET DEFAULT。请注意,这些并不能成为您遵守任何约束的借口。例如,如果一个操作指定了 SET DEFAULT 但默认值不满足外键,则删除主键将失败。

更多信息:http ://www.postgresql.org/docs/7.4/static/ddl-constraints.html

于 2012-06-18T21:05:38.203 回答