2012-06-18 39 views
1

我有下面的方案一個簡單的表:」此行沒有唯一標識符。「在Postgres裏當試圖刪除一行

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在刪除語句後沒有效果。 你能告訴我問題是什麼嗎?

+1

你的意思是「*在刪除語句後沒有效果*嗎?你得到一個錯誤嗎?你有沒有提交你的刪除?它在哪裏沒有」效果「。 –

+0

當我輸入:'delete from dateien where id = 1;'我只是'沒有找到行'。並且有一行帶有這個標識 – soupdiver

+0

有沒有機會通過這個名稱在不同的模式下擁有多個表? – kgrittn

回答

1

啊該死...我發現了錯誤。我忘了提及在這張桌子上也有效的觸發器。觸發是:

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

但是,當刪除我返回了什麼錯誤。這就是爲什麼它不起作用。

0

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

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

因此,我只能猜測......,作爲一個例子。表產品,訂單,日期。

如果在創建引用它的訂單後刪除產品,該怎麼辦? SQL允許你指定。直觀地說,我們有幾個選項:

  • 不允許刪除被引用的產品。
  • 刪除訂單以及
  • 還有其他嗎?

當有人想要刪除仍被訂單引用的產品(通過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

+0

這不是問題,我在我的答案中描述了我忘了提及的東西,但無論如何,謝謝! – soupdiver