PHP连接:

php.ini中将extension=php_pgsql.dll前面的分号去掉,然后设置extension_dir指向php文件下的ext文件夹。

正常情况下这样php就可以连接postgres了,但是我的仍然出错,提示“Fatal error: Call to undefined function pg_connect()”,查看Apache的日志,“PHP Startup: Unable to load dynamic library ‘****\\PHP5\\ext\\php_pdo_pgsql.dll”。

经过查找,在Apache中conf文件夹下的配置文件httpd.conf中添加 LoadFile "***/PHP5/libpq.dll",位置在LoadModule后面即可。

(***为php安装路径)

重点来了:thinkphp 中的table_msg函数竟然找不到,需要自己手动创建:

在 PostgreSQL 里添加自定义函数 table_msg

复制以下代码到SQL管理器里执行即可:

CREATE OR REPLACE FUNCTION pgsql_type(a_type varchar) RETURNS varchar AS$BODY$DECLAREv_typevarchar;BEGIN

IF 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;RETURNv_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_sqlvarchar;

v_rec RECORD;

v_keyvarchar;BEGIN

SELECTpg_class.oidINTOv_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 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 EXECUTEv_sql LOOP

v_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 NEXTv_ret;ENDLOOP;RETURN;END;

$body$

LANGUAGE‘plpgsql‘ VOLATILE CALLED ON NULLINPUT SECURITY INVOKER;

COMMENTON 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;BEGIN

FOR v_ret IN SELECT * FROM table_msg(‘public‘,a_table_name) LOOPRETURN NEXTv_ret;ENDLOOP;RETURN;END;

$body$

LANGUAGE‘plpgsql‘ VOLATILE CALLED ON NULLINPUT SECURITY INVOKER;

COMMENTON FUNCTION "public"."table_msg"(a_table_name varchar)IS ‘获得表信息‘;

修改 ThinkPHP 源代码里面的 BUG

把 ThinkPHP\Library\Think\Db\Driver\Pgsql.class.php 第 41 行 修改为:

$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.‘\‘);‘);

也就是在 $tableName 前后各添加一个单引号,(‘.$tableName.‘) => (\‘‘.$tableName.‘\‘)。

除了上面的问题,我还发现,M(‘table‘)->add()不能正常的返回新增记录的主键id值。

原文:http://www.cnblogs.com/blueskycc/p/5057334.html

pgsql thinkphp5_thinkphp 连接postgresql相关推荐

  1. Windows 10 安装配置连接PostgreSQL教程

    Windows 10 安装配置连接PostgreSQL教程 1.1 PostgreSQL 下载 1.2 配置环境变量 1.3 PostgreSQL 初始化 1.4 创建postgres用户 1.5 启 ...

  2. C#如何连接postgresql数据库?

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.pandas是什么? 二.使用步骤 1.引入库 2.读入数据 总结 前言 学习记录如何用C#来连接postgres ...

  3. Python3连接PostgreSQL(10.5)数据库

    一.Psycopg简介 Psycopg是Python编程语言中最流行的PostgreSQL数据库适配器.它的主要功能是完整实现Python DB API 2.0规范和线程安全(多个线程可以共享相同的连 ...

  4. Entity Freamwork 6连接PostgreSql数据库

    原文 Entity Freamwork 6连接PostgreSql数据库 开发环境 VS 2015  Update 1   Postgre Sql 9.4 使用过程 1.使用Nuget在项目中添加对E ...

  5. java编译POSTGRESQL_Java连接PostgreSQL数据库(安装环境 + 简易测试代码)

    --[楼主比较啰嗦, 会列出几个异常情况以供参考]-- 1, 安装环境 1.0 Win7 32位 1.2 编译器:  Spring Tool Suite 3.7.1  官网下载地址:http://sp ...

  6. Entity Framework 4.3.1 Code First 连接 PostgreSQL 9.2.3 小结

    在CentOS6.3上源码编译装好PostgreSQL9.2.3,下一步尝试将数据库从Microsoft SQL Server 2000迁移到PostgreSQL,并且尝试使用Entity Frame ...

  7. typescript-koa-postgresql 实现一个简单的rest风格服务器 —— 连接 postgresql 数据库...

    接上一篇,这里使用 sequelize 来连接 postgresql 数据库 1.安装 sequelize,数据库驱动 pg yarn add sequelize sequelize-typescri ...

  8. python连接postgresql数据库

    连接postgresql数据库 pip install psycopg2 ## 导入psycopg2包 import psycopg2 ## 连接到一个给定的数据库 conn = psycopg2.c ...

  9. 视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时 ...

最新文章

  1. java技术全掌握了_你必须掌握的 21 个 Java 核心技术!
  2. 单纯形法(二)(线性规划的基本定理)
  3. 动视暴雪员工大罢工:因CEO被曝多次包庇高管性侵下属、本人曾性骚扰助理
  4. 使用Visual Studio 2010开发和调试Html5项目
  5. 【Python】青少年蓝桥杯_每日一题_4.03_求偶数
  6. mysql unlix下载_系统(PHP的MySQL的版本:showmov3.0)平台:Win和Linux / unlix其他发
  7. 计算机用户的注册表,计算机上的注册表在哪里
  8. 1、Flutter_初体验_创建第一个应用_AndroidStudio_windows
  9. 谷歌浏览器打开tif_谷歌打开后是搜狗浏览器??怎么办
  10. SQL中使用DISTINCT显示多个字段的方法(不使用DISTINCT了)
  11. ThirdServiceManager SDK
  12. linux java weblogic,Linux java 安装问题
  13. 股票冲高回落意味着什么?
  14. 腾讯云再登 KVM 开源贡献榜,Linux 虚拟化技术将走向何方?
  15. Android开发之科大讯飞语音合成与播报
  16. BugkuCTF之misc题之图穷匕见
  17. 对待前任你有遗憾么?
  18. 希捷250G硬盘经PM8提示分区表错误修复后不能使用
  19. 实用工具分享-桌面美化软件Fences
  20. 淘宝双十一喵果总动员一共多少级?喵果总动员什么时候兑换红包

热门文章

  1. 浪潮云海OS再度登顶 SPEC Cloud性能得分「全球第一」
  2. 百度大脑“乘风”新基建,“破浪”产业智能化落地
  3. 数据科学产业中哪些架构最热门?本文为你盘点了 5 款!
  4. 力荐联邦学习系统,据说英伟达Clara“上架”新进展!
  5. 云现场 | 为什么说边缘计算是5G时代的必备品?
  6. java 日期数组_Java数组
  7. android studio json插件_热门Android Studio 插件,这里是Top 20
  8. php7 daemon,编译PHP7
  9. android保存字符到sd卡,android 保存TXT文件到SD卡方法
  10. 搭建 ELK 集群 kafka filebeat kibana logstash zookeeper elasticsearch