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;