查正在运行的SQL
SELECT procpid, START, now() - START AS lap, current_query FROM ( SELECT backendid, pg_stat_get_backend_pid (S.backendid) AS procpid, pg_stat_get_backend_activity_start (S.backendid) AS START, pg_stat_get_backend_activity (S.backendid) AS current_query FROM ( SELECT pg_stat_get_backend_idset () AS backendid ) AS S ) AS S WHERE current_query <> '<IDLE>' ORDER BY lap DESC;
--杀进程 SELECT pg_cancel_backend('33746') |
杀进程
SELECT pg_cancel_backend('33746')
跟ORACLE语法区别之处
Update和delete语法区别
Pg 和MySQL Update和delete的时候表名不能加别名
插入数字类型不一样
ORACLE 对number类型的数据可以用’’ 字符串标记插入,但是PG不行,必须要进行正确的数据类型
SEQ使用不同
ORACEL的SEQ 是 SELECT SEQ,NEXT_VAL FROM DUAL
PG 使用方法select nextval('SEQ_NAME')
时间格式化不一样
翻页查询不一样
oracle用rownum控制,pg用limit控制
差集不一样
oracle用minus,pg用EXCEPT
时间函数不一样
获取通用时间SELECT CURRENT_TIMESTAMP,oracle一般用sysdate,PG 还有current_date(),current_time();
条件判断不一样
PG没有decode判断,需要用case when then 代替
判断字符串为空
oracle Select NVL(foo,'Value is Null') FROM dual; PostgreSQL Select coalesce(foo,'Value is Null') |
查询字符串INSTR不一样
oracle Select INSTR('Great','eat') FROM dual; PostgreSQL Select POSITION('eat' IN 'great'); |
执行存过不一样
Pg存过执行都是CALL XXX();
即便在存储内部调用存过都是call xxx();必须要写call
Oracle 可以用begin xxx();end;调用
也可以用{ call xxx(); }
在存过内部调用存过不需要写call ,直接写函数名称
跟ORACLE语法相同之处
都有SEQUENCE
字符串连接都用||
存过的赋值都是 := 判断都是=
都可以指定动态查询,比如存过中使用动态SQL
--PostgreSql execute 'select count(1) from test' into v_count; --Oracle execute immediate 'select count(1) from test' into v_count; open cur for execute 'select * from xxx'; loop end loop; close cur; |
总结:
postgresql的语法感觉是mysql和oracle的结合体
通用时间 current_timestamp