?
? ????? PHP ??? ???? ??? ?? ??
PostgreSQL服務(wù)器為它收到的每個命令返回一個命令狀態(tài)字符串,比如 INSERT 149592 1 。 如果沒有涉及規(guī)則,那么這些就很簡單,但是如果查詢是被規(guī)則重寫的又會怎樣呢?
規(guī)則對命令狀態(tài)的影響如下:
如果查詢不存在無條件的INSTEAD規(guī)則,那么最初給出的查詢將會被執(zhí)行,并且它的命令狀態(tài)將像平常一樣返回。 但是請注意如果存在任何條件INSTEAD規(guī)則,那么他們的條件的反條件將會已經(jīng)加到最初的查詢里了。 這樣可能會減少它處理的行數(shù),如果這樣的話,報告狀態(tài)將受影響。
如果查詢有任何無條件的INSTEAD規(guī)則,那么最初的查詢將完全不會被執(zhí)行。 在這種情況下,服務(wù)器將返回由服務(wù)器將返回由INSTEAD規(guī)則(條件的或非條件的)插入的 最后一條和源查詢同命令類型(INSERT,UPDATE, DELETE)查詢的命令狀態(tài)。 如果規(guī)則添加的查詢都不符合這些要求,那么返回的命令狀態(tài)顯示源查詢類型而行計數(shù)和 OID 字段為零。
(這個系統(tǒng)是在PostgreSQL7.3建立的。在之前的版本中,當(dāng)存在規(guī)則時,命令狀態(tài)會顯示不同的結(jié)果。)
程序員可以用下面的方法確保任何需要的INSTEAD規(guī)則都是在上面第二種情況里設(shè)置命令狀態(tài)的規(guī)則: 給這個規(guī)則命名為字母順序最后一個活動的規(guī)則,這樣它就最后附加