postgresql开发中可能有用的知识
postgresql手册
一、PostgreSQL中可以直接对时间进行加减运算:
查询系统当前时间:
SELECT now()::timestamp + '1 year'; --当前时间加1年 二、PostgreSQL存储过程小案例1、创建存储过程格式: CREATEORREPLACEFUNCTION函数名(参数1,[整型int4,整型数组_int4,...]) RETURNS返回值类型AS $BODY$ DECLARE 变量声明 BEGIN 函数体 END; $BODY$ LANGUAGE‘plpgsql’VOLATILE; 实例: CREATEORREPLACEFUNCTIONmessage_deletes(ids"varchar",useridint8) RETURNSint4AS $BODY$ DECLARE rRECORD; delbool; numint4:=0; sql"varchar"; BEGIN sql:='selectid,receiveuserid,senduserid,senddelete,receivedeletefrommessagewhereidin('||ids||')'; FORrINEXECUTEsqlLOOP del:=false; IFr.receiveuserid=useridandr.senduserid=useridTHEN del:=true; ELSEIFr.receiveuserid=useridTHEN IFr.senddelete=falseTHEN updatemessagesetreceivedelete=truewhereid=r.id; ELSE del:=true; ENDIF; ELSEIFr.senduserid=useridTHEN IFr.receivedelete=falseTHEN updatemessagesetsenddelete=truewhereid=r.id; ELSE del:=true; ENDIF; ENDIF; IFdelTHEN deletefrommessagewhereid=r.id; num:=num+1; ENDIF; ENDLOOP; returnnum; END; $BODY$ LANGUAGE'plpgsql'VOLATILE; 2、查看自己建立的存储过程或者说函数的命令
SELECT pg_proc.pronameAS"函数名称",pg_type.typnameAS"返回值数据类型",pg_proc.pronargsAS"参数个数" FROM pg_proc JOINpg_type ON(pg_proc.prorettype=pg_type.oid) WHERE pg_type.typname!='void' ANDpronamespace=(SELECTpg_namespace.oidFROMpg_namespaceWHEREnspname='public');
函数名称|返回值数据类型|参数个数 ---------------------------+----------------+---------- somefunc|int4|0 getemp|emp|1 delucsmmempreviousdata|trigger|0 deldiskstatuspreviousdata|trigger|0 3、删除函数 例如删除delucsmmempreviousdata函数: delete from pg_proc where pg_proc.proname='delucsmmempreviousdata'; 二、PostgreSQL触发器参考:Postgresql触发器 PostgreSQL的触发器是数据库自动执行指定的数据库事件发生时调用的回调函数。以下是有关PostgreSQL的触发器的要点:www.yiibai.com
语法: 创建触发器的基本语法如下:
Hereevent_namecould beINSERT,DELETE,UPDATE,andTRUNCATEdatabase operation on the mentioned tabletable_name. You can optionally specify FOR EACH ROW after table name. Following is the syntax of creating a trigger on an UPDATE operation on one or more specified columns of a table as follows:
例子 让我们考虑一个情况下,我们要保持审核COMPANY表中的每一条记录被插入,我们将创建新如下(如果已经创建过,那么删除COMPANY表)
为了保持审核的测试,我们将创建一个新的表被称为审计将被插入日志消息每当有一个新的记录条目表COMPANY:www.yiibai.com
这里的ID是审计记录ID,EMP_ID的ID来自COMPANY表,日期将保持公司表时的记录将被创建时间戳。所以,现在让我们创建一个触发器,COMPANY表如下:
auditlogfunc()是一个PostgreSQL的过程,有以下定义:
现在,让我们开始COMPANY表插入记录,这将导致在审核表中创建审计日志记录。因此,让我们创建一个COMPANY表记录如下:
这将创建一个记录COMPANY表如下:yiibai.com
同时审核表中创建一条记录。这条记录是一个触发我们已经创建了COMPANY表上的INSERT操作的结果。类似的方式,也可以创建触发器,UPDATE和DELETE操作根据要求。
列出触发器 可以列出当前数据库中的所有触发器从pg_trigger表如下:
以上PostgreSQL的表会列出所有触发器。 如果要列出特定表上的触发器,然后使用条款与表名如下:
以上PostgreSQL的表也会列出只有一个条目如下:
删除触发器 以下是DROP命令可以用来删除一个现有的触发:yiibai.com
|