查正在运行的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

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐