ThinkPHP version: 5.1.*

使用 ThinkPHP 框架连接PGSQL时遇到的坑, 记录下来...避免一次一顿百度....

改配置

修改 /config/database.php 这个配置文件

connect pgsql config

  • 如果此时对数据操作会报错

    could not find driver

开扩展

修改 php.ini 打开连接pgsql需要的扩展, 如果没有请到 http://pecl.php.net/ 下载对应版本的扩展
修改了 php.ini 别忘了重启apache/nginx

php extensions

执行sql

在使用之前请先在 navicat 中运行一下SQL, ThinkPHP中自带这一个SQL文件
/thinkphp/library/think/db/connector/pgsql.sql

CREATE OR REPLACE FUNCTION pgsql_type(a_type varchar) RETURNS varchar AS
$BODY$
DECLAREv_type varchar;
BEGINIF a_type='int8' THENv_type:='bigint';ELSIF a_type='int4' THENv_type:='integer';ELSIF a_type='int2' THENv_type:='smallint';ELSIF a_type='bpchar' THENv_type:='char';ELSEv_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$
DECLAREv_ret tablestruct;v_oid oid;v_sql varchar;v_rec RECORD;v_key varchar;
BEGINSELECTpg_class.oid  INTO v_oidFROMpg_classINNER JOIN pg_namespace ON (pg_class.relnamespace = pg_namespace.oid AND lower(pg_namespace.nspname) = a_schema_name)WHEREpg_class.relname=a_table_name;IF NOT FOUND THENRETURN;END IF;v_sql='SELECTpg_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_commentFROMpg_attributeINNER JOIN pg_class  ON pg_attribute.attrelid = pg_class.oidINNER JOIN pg_type   ON pg_attribute.atttypid = pg_type.oidLEFT OUTER JOIN pg_attrdef ON pg_attrdef.adrelid = pg_class.oid AND pg_attrdef.adnum = pg_attribute.attnumLEFT OUTER JOIN pg_description ON pg_description.objoid = pg_class.oid AND pg_description.objsubid = pg_attribute.attnumWHEREpg_attribute.attnum > 0AND attisdropped <> ''t''AND pg_class.oid = ' || v_oid || 'ORDER BY pg_attribute.attnum' ;FOR v_rec IN EXECUTE v_sql LOOPv_ret.fields_name=v_rec.fields_name;v_ret.fields_type=v_rec.fields_type;IF v_rec.fields_length > 0 THENv_ret.fields_length:=v_rec.fields_length;ELSEv_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 THENv_ret.fields_key_name=v_key;ELSEv_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$
DECLAREv_ret tablestruct;
BEGINFOR v_ret IN SELECT * FROM table_msg('public',a_table_name) LOOPRETURN 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 '获得表信息';

转载于:https://www.cnblogs.com/liaohui5/p/10581571.html

ThinkPHP链接 PgSQL相关推荐

  1. thinkphp链接mssql以及查询中文乱码问题

    为什么80%的码农都做不了架构师?>>>    首先说下我的环境,thinkphp版本3.1  php版本5.2.6  sqlserver2005  mysql版本5.2 最近做一个 ...

  2. 600G计算机、编程语言网盘分享链接

    up!  http://pan.baidu.com/s/1eQreUky 中科院研究生课程 1.JavaScript视频教程 链接: http://pan.baidu.com/s/1gd57FVH 密 ...

  3. python快速编程入门黑马-500G 史上最全的JAVA全套教学视频网盘分享

    500 G JAVA视频网盘分享(JEECG开源社区) [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] 2.JPA视频教程 ...

  4. Java,Android,计算机原理视频,500G视频资料

    1.JavaScript视频教程 链接: http://pan.baidu.com/s/1gd57FVH 密码: d9ei 2.JPA视频教程 链接: http://pan.baidu.com/s/1 ...

  5. 视频分享 500 G JAVA视频网盘分享(JEECG开源社区)

     功德无量 JEECG开源社区秉承开源宗旨,分享社区Java架构视频,更多资料点击: www.jeecg.org  JEECG师徒架构群③: 24110687 Jeecg开设师徒架构学习班(师傅带徒弟 ...

  6. JAVA视频资料百度网盘分享

    1.javascript视频教程 链接:点击打开链接 密码: d9ei 2.JPA视频教程 链接: 点击打开链接 密码: fwwd 3.马士兵hibernate视频教程 链接:http://pan.b ...

  7. 500G技术资源分享

    转载自:http://blog.csdn.net/zhangdaiscott/article/details/18220411 1.JavaScript视频教程 链接: http://pan.baid ...

  8. Java资料网盘分享

    1.JavaScript视频教程 链接: http://pan.baidu.com/s/1gd57FVH 密码: d9ei 2.JPA视频教程 链接: http://pan.baidu.com/s/1 ...

  9. JAVA视频网盘分享

    JAVA视频网盘分享 [涵盖从java入门到深入架构,Linux.云计算.分布式.大数据Hadoop.ios.Android.互联网技术应有尽有] 1.JavaScript视频教程 链接: http: ...

最新文章

  1. python用pip安装_使用pip安装python库的几种常用方法
  2. 汇编指令的学习2——常用的ARM指令
  3. 【JAVA基础篇】面对对象的特征
  4. 安装memcache
  5. mac netbeans java_在macOS上不安装JDK的情况下安装Netbeans
  6. 为ASP.NET 2.0网站生成唯一程序集
  7. Hash表、Hash函数及冲突解决
  8. 用Jquery写tab插件(支持点击和移动及其他事件)
  9. Android使用NanoHttpd在app内搭建http server(一)
  10. 最新百度网盘下载神器,免安装、免登录、不限速!一键打开网址就能用
  11. ue4蓝图运行顺序_如何从零基础慢慢学习到UE4的顺序?
  12. python爬取qq音乐下载歌曲
  13. [区块链笔记1] 入坑区块链 智能合约solidity基础
  14. Python学习第一课——爬取模特秀网站的模特图片
  15. asp毕业设计——基于asp+access的校园网物品交易平台设计与实现(毕业论文+程序源码)——校园网物品交易平台
  16. 【附源码】Python计算机毕业设计烹饪课程预约系统
  17. 揭开影响RS485通讯因素的面纱
  18. 浙江工大学计算机学院保研,浙江工业大学计算机科学与技术学院(专业学位)软件工程保研...
  19. 新一轮车检改革下车检市场的破局探究
  20. 开源与安全的“冰与火之歌”

热门文章

  1. P1091 合唱队形
  2. 使用hibernate可以优化的地方
  3. 使用asp.net mvc开发应用程序,页面中的page.IsPostback还有用处吗?
  4. 大数据之-Hadoop3.x_Yarn_基础架构---大数据之hadoop3.x工作笔记0141
  5. 大数据之-Hadoop完全分布式_RM启动注意事项---大数据之hadoop工作笔记0041
  6. 微服务升级_SpringCloud Alibaba工作笔记0014---Nacos简介和下载_10万微服务实例在线管理
  7. 微服务升级_SpringCloud Alibaba工作笔记0003---理解spring webflux_响应式堆栈_提高微服务吞吐量和伸缩性
  8. findstr()与strfind()的区别
  9. 总结之《征服C指针》
  10. js 跳转传递汉字参数