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.