20.2. 存取PostgreSQL table

20.2.1. 生成資料

舉例:

20.2.2. 讀取資料

舉例:

20.2.3. 更改資料

舉例:

20.2.4. 刪除資料

舉例:

20.2.5. 細部預先過濾function

如果在資料庫有PostgreSQLapi_pre_check(IN TEXT,IN TEXT,IN TEXT,IN "char",IN TEXT)的function,則伺服器於處理每一次API呼叫之前都會先執行這個function。如果這個function回傳false或raise execption的話,則伺服器放棄回應該次請求。(因為PostgreSQL通常被設定成記錄exception的log而佔據硬碟空間,所以請盡量避免製造exception。)

Function api_pre_check()的參數說明如下:

  1. user id

  2. table name

  3. company code

  4. cru、或d

  5. 條件

    以下面的API請求為例,

    curl -v -H "Content-Type:Application/json" -H 'Authorization:abHEi47obYMiCi193xjEiWIFpOouNmkd' -H 'X-Auth-Database:dev5' -d '{"table":"t52","company":"1","query":[[["f0","1"],["f1",4]],[["f4",880],["f5",0]]]}' https://34.terarows.com/fastcgi/api/u
    					

    條件內容就是"query" key的值:[[["f0","1"],["f1",4]],[["f4",880],["f5",0]]]

這些參數都在伺服器於執行API之前主動提供。

設置api_pre_check()舉例:

CREATE FUNCTION api_pre_check(user_id TEXT,table_name TEXT,company TEXT,crud "char",query TEXT) RETURNS BOOLEAN AS $$
BEGIN
	IF crud IN ('u','d') THEN 
		RETURN
			EXISTS (SELECT 1 FROM t43 WHERE f1=user_id AND f8)
			AND EXISTS (SELECT 1 FROM t52 WHERE f0=company AND AGE(f2) < INTERVAL '1 month');
	END IF;
	RETURN TRUE;
END $$ LANGUAGE PLPGSQL STABLE;