postgresql+postgis空间数据库安装总结

来源:互联网 发布:linux下挂载磁盘阵列 编辑:程序博客网 时间:2024/05/29 04:11
参考资料
postgresql+postgis安装步骤图解
http://blog.csdn.net/u010166404/article/details/51119587
PHP连接postgresql
https://www.cnblogs.com/FlyFive/archive/2013/03/11/2954686.html

pgsql安装步骤:
pgsql安装包直接安装即可(安装完成后自动提醒postgis),安装过程的设置可以按照上面的网址进行

注意事项:
1.安装过程中注意修改安装文件位置(方便之后更改配置)
2.安装后登录名默认是:postgres(密码在安装过程中自己设置)

pgsql配置:
1.设置其他人访问服务器pgsql
安装PostgreSQL数据库之后,默认是只接受本地访问连接,如果想在其他主机上访问PostgreSQL数据库服务器:

第一步:修改pgsql文件夹下的data里面的pg_hba.conf:
# IPv4 local connections:
host all all 0.0.0.0/0 md5
# IPv6 local connections:
#host all all 127.0.0.1/32 md5
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5

第二步:修改pgsql文件夹下的data里面的postgresql.conf:
把#listen_addresses=’localhost’更改为listen_addresses=’*’

第三步:修改防火墙配置,开启5432端口:https://jingyan.baidu.com/article/f96699bbadafca894f3c1b7a.html

如果以上步骤修改后不行,去看下面的网址:
http://blog.csdn.net/zhu_xun/article/details/21234663

2.postgresql的sql管理器执行 如下代码:(为postgresql添加 函数 table_msg,不然无法执行sql语句或者报错)
这条是针对php的
CREATE OR REPLACE FUNCTION pgsql_type(a_type varchar) RETURNS varchar AS
$BODY$
DECLARE
v_type varchar;
BEGIN
IF a_type='int8' THEN
v_type:='bigint';
ELSIF a_type='int4' THEN
v_type:='integer';
ELSIF a_type='int2' THEN
v_type:='smallint';
ELSIF a_type='bpchar' THEN
v_type:='char';
ELSE
v_type:=a_type;
END IF;
RETURN v_type;
END;
$BODY$
LANGUAGE PLPGSQL;

CREATE TYPE "public"."tablestruct" AS (
"fields_key_name" varchar(100),
"fields_name" VARCHAR(200),
"fields_type" VARCHAR(20),
"fields_length" BIGINT,
"fields_not_null" VARCHAR(10),
"fields_default" VARCHAR(500),
"fields_comment" VARCHAR(1000)
);

CREATE OR REPLACE FUNCTION "public"."table_msg" (a_schema_name varchar, a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS
$body$
DECLARE
v_ret tablestruct;
v_oid oid;
v_sql varchar;
v_rec RECORD;
v_key varchar;
BEGIN
SELECT
pg_class.oid INTO v_oid
FROM
pg_class
INNER JOIN pg_namespace ON (pg_class.relnamespace = pg_namespace.oid AND lower(pg_namespace.nspname) = a_schema_name)
WHERE
pg_class.relname=a_table_name;
IF NOT FOUND THEN
RETURN;
END IF;

v_sql='
SELECT
pg_attribute.attname AS fields_name,
pg_attribute.attnum AS fields_index,
pgsql_type(pg_type.typname::varchar) AS fields_type,
pg_attribute.atttypmod-4 as fields_length,
CASE WHEN pg_attribute.attnotnull THEN ''not null''
ELSE ''''
END AS fields_not_null,
pg_attrdef.adsrc AS fields_default,
pg_description.description AS fields_comment
FROM
pg_attribute
INNER JOIN pg_class ON pg_attribute.attrelid = pg_class.oid
INNER JOIN pg_type ON pg_attribute.atttypid = pg_type.oid
LEFT OUTER JOIN pg_attrdef ON pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = pg_attribute.attnum
LEFT OUTER JOIN pg_description ON pg_description.objoid = pg_class.oid AND pg_description.objsubid = pg_attribute.attnum
WHERE
pg_attribute.attnum > 0
AND attisdropped <> ''t''
AND pg_class.oid = ' || v_oid || '
ORDER BY pg_attribute.attnum' ;

FOR v_rec IN EXECUTE v_sql LOOP
v_ret.fields_name=v_rec.fields_name;
v_ret.fields_type=v_rec.fields_type;
IF v_rec.fields_length > 0 THEN
v_ret.fields_length:=v_rec.fields_length;
ELSE
v_ret.fields_length:=NULL;
END IF;
v_ret.fields_not_null=v_rec.fields_not_null;
v_ret.fields_default=v_rec.fields_default;
v_ret.fields_comment=v_rec.fields_comment;
SELECT constraint_name INTO v_key FROM information_schema.key_column_usage WHERE table_schema=a_schema_name AND table_name=a_table_name AND column_name=v_rec.fields_name;
IF FOUND THEN
v_ret.fields_key_name=v_key;
ELSE
v_ret.fields_key_name='';
END IF;
RETURN NEXT v_ret;
END LOOP;
RETURN ;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

COMMENT ON FUNCTION "public"."table_msg"(a_schema_name varchar, a_table_name varchar)
IS '获得表信息';

---重载一个函数
CREATE OR REPLACE FUNCTION "public"."table_msg" (a_table_name varchar) RETURNS SETOF "public"."tablestruct" AS
$body$
DECLARE
v_ret tablestruct;
BEGIN
FOR v_ret IN SELECT * FROM table_msg('public',a_table_name) LOOP
RETURN NEXT v_ret;
END LOOP;
RETURN;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

COMMENT ON FUNCTION "public"."table_msg"(a_table_name varchar)
IS '获得表信息';


注意:如果使用的是tp框架需要修改 ThinkPHP\Library\Think\Db\Driver\Pgsql.class.PHP 里的 getFields() 方法,通过转义符把单引号添加
修改为:

$result = $this->query('select fields_name as "field",fields_type as "type",fields_not_null as "null",fields_key_name as "key",fields_default as "default",fields_default as "extra" from table_msg(\''.$tableName.'\');');

3.如果当前使用的数据库是PostgreSQL 9.1+,那就无需使用template_postgis之类的模版数据库来创建空间数据库
使用一条扩展命令SQL即可令数据库支持,在pgAdmin中打开SQL视图,输入并执行:
CREATE EXTENSION postgis;
执行成功后就开启了pgsql对空间字段的支持
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 优购网的优惠券 yougou u购网 邮购 电视购物频道 优购物 yougov 大中电器网上商城 优生活 乐思购电视购物 乐思购 优够 有购 優購 赛优教育 赛优 优越感 星野优越 优越的意思 优越感什么意思 杭州强生优越 王紫璇家境优越 优越者硬盘盒 优越的反义词 优趣猫粮 小小优趣 优趣猫粮怎么样 优趣 优趣猫粮属于什么档次 我的女友是声优笔趣 路优泰 优路教育app下载 优路教育app 优路教育好不好 合肥优路 优路网校 优路教育押题怎么样 优路教育一级建造师 优路教育押题 优路总裁班 优路教育网址