EDB PPAS(Oracle 兼容版)的坑 不兼容PostgreSQL一例

less than 1 minute read

背景

这样一段正常的兼容ORACLE的代码,在使用社区版本的psql连接到PPAS时,执行异常

postgres=> create table about_we (id int, info text); create sequence SEQ_ABOUT_WE_ID;  
  
postgres=> CREATE OR REPLACE TRIGGER TRI_ABOUT_WE_ID BEFORE INSERT ON ABOUT_WE  
FOR EACH ROW  
BEGIN  
  SELECT SEQ_ABOUT_WE_ID.nextval  
  INTO :new.ID  
  FROM dual;    
end;  
ERROR:  42601: syntax error at end of input  
LINE 6:   FROM dual;  
                    ^  
LOCATION:  scanner_yyerror, scan.l:1374  

但实际上,语法是PPAS兼容ORACLE的语法,并没有问题。

原因惊人,竟然是PPAS在客户端psql上做了hack,来实现这一的语法兼容。

所以使用社区版本的psql是不行的,记住咯。

以后不要使用社区版本的psql连接PPAS了,否则就等着给自己挖坑吧。 请使用EDB自己的那套东西。

或者使用pgadmin,因为pgadmin号称兼容ppas。

https://www.pgadmin.org/

Flag Counter

digoal’s 大量PostgreSQL文章入口