Postgresql踩坑记

1:通过postgis插件导入shape文件后,原来的空间列不再是shape字段了,变成了geom字段。

2:postgresql是区分大小写的,当不加双引号时,默认回去找大写的表或者列,如果没有小写,只有大写,则会报错。如果需要找到大写的表或者列,则需要加双引号。

3:postgresql没有dual表,所以需要新建一个名为dual的视图

    CREATE OR REPLACE VIEW public.dual AS
     SELECT NULL::unknown AS unknown
      WHERE 1 = 1;

    ALTER TABLE public.dual
      OWNER TO postgres;
    GRANT ALL ON TABLE public.dual TO postgres;
    GRANT SELECT ON TABLE public.dual TO public;

4:postgresql的函数与oracle中的函数的参数类型存在不同,需要特别注意,如substr、to_char、to_number、trunc、date_trunc

5:postgresql pgAgent 定时任务中最好使用远程连接,并且在连接字符串后面后面添加password=你的密码,并且任务的执行情况可以通过统计量看出

6:postgresql中函数与存储过程是一个东西,所以oracle中的存储过程移植过来是没用的,需要转成function

7:postgresql中的function的定义与oracle不太一样,如return变成returns is变成 as ,并且需要$$开始和结束。并且没有commit事务的概念,因为在potgresql函数中在begin/end语句块内的代码都是在一个事务当中的。具体查看postgresql的自定义函数
 

    CREATE OR REPLACE FUNCTION totalRecords ()  
    RETURNS integer AS $total$  
    declare  
        total integer;  
    BEGIN  
       SELECT count(*) into total FROM EMPLOYEES;  
       RETURN total;  
    END;  
    $total$ LANGUAGE plpgsql;


8:不要引入oracle中的force 还有immediate关键字,commit等等不识别

9:postgresql中除了列名、表名等用来标识对象名称外尽量不要使用双引号,会被解释成列名的。。所以尽量使用单引号。如果sql语句在字符串中,则sql中使用两个单引号来标识字符串,如'select from tt where c1 = ''aa'''

10:不可使用oracle中常用的查询更新语句,如果update tt set (c1,c2) = (select c1,c2 from ..),而必须使用update from 新语句,update tt set c1 = t2.c1 ,c2 = t1.c2 from t1(或者子查询)

11:在postgresql的函数中进行调试,打印变量值可以通过raise notice进行
 

    create or replace function ads.showText(p_text character varying)
    returns void
    as $$
    begin
     raise notice 'Parameter is: %', p_text;
    end;

12:如果想通过arcgis连接postgresql,则需要参考你的arcgis版本,查询此版本对应支持的postgresql的版本,并通过一定的操作才可以连接,因为需要32位的客户端,所以我推荐直接安装32位的postgresql.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值