thinkphp5, 结合pgsql使用时, 要先运行这段sql代码
按照tp5的官方文档的说法, 必须这么做: 先执行一段sql代码
- 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" ),
- "fields_name" ),
- "fields_type" ),
- "fields_length" BIGINT,
- "fields_not_null" ),
- "fields_default" ),
- "fields_comment" )
- );
- 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;
- 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 '获得表信息';
;
thinkphp5, 结合pgsql使用时, 要先运行这段sql代码的更多相关文章
- 用BSF + Beanshell使Java程序能够运行字符串形式的代码(转载)
BSF(Bean Scripting Framework)最初是IBM Alpha工作组的项目,后来贡献给了Apache,BSF使Java能够更好的与各种流行脚本语言整合,实现不同语言之间的交互功能. ...
- 使用node成功安装完某插件typescript后,在使用时提示:tsc(或xxx)不是内部或外部命令,也不是可运行的程序或批处理文件
具体出错情形: 使用npm安装typescript明明安装成功,但在使用时一直报错,报错语句为 tsc不是内部或外部命令,也不是可运行的程序或批处理文件 具体出错原因: node未正确安装,或相关环 ...
- MySQL 安装和启动服务,“本地计算机 上的 MySQL 服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。”
MySQL 安装和启动服务,以及遇到的问题 MySQL版本: mysql-5.7.13-winx64.zip (免安装,解压放到程序文件夹即可,比如 C:\Program Files\mysql-5. ...
- fstream对象重复使用时注意clear()的调用
fstream对象重复使用时注意clear()的调用,否则会造成打开第二个文件失败.这是因为一个fstream对象对应磁盘上的一个文件,这种绑定关系在调用open()函数或者构造函数时指定,但有时我们 ...
- Eclipse和Android Studio中的DDMS使用时什么不同?
http://www.jb51.net/softjc/454131.html Eclipse和Android Studio中的DDMS使用时什么不同? 相信很多经常开发Android应用的朋友应该都接 ...
- SSH hibernate 使用时最好添加访问数据库的编码
SSH hibernate 使用时最好添加访问数据库的编码 如下所示:第13行为设置hibernate访问数据库的编码(&是&的转义序列) <!DOCTYPE hibernate ...
- Toolbar 和 CollapsingToolbarLayout一起使用时menu item无点击反应解决办法
昨天一直在琢磨为什么Toolbar和CollapsingToolbarLayout一起使用时menu item无点击放应的原因,后来在stackoverflow上一条回答,说可能是Toolbar的背景 ...
- jqueryUI中datepicker的使用,解决与asp.net中的UpdatePanel联合使用时的失效问题
1.jqueryUI的datepicker的使用 -->首先在jqueryUI官网上根据你的需要下载适合你系统主题的样式,jqueryUI主题下载地址: -->下载后的文件 jquery- ...
- 【原】无脑操作:IDEA使用时,提示"8080端口被占用"的解决
1.问题描述:IDEA使用时,提示"8080端口被占用" Description: The Tomcat connector configured to listen on ...
随机推荐
- centos 7 mysql 离线安装教程
1. 解压下载的zip包,会发现有以下几个rpm包: MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm MySQL-devel-advanced-5.6.22 ...
- httperf+autobench测试web应用
测试性能相关的概念理解 httperf使用 主页: http://www.hpl.hp.com/research/linux/httperf/ 下载: http://httperf.googleco ...
- centos7 samba安装与配置
1.关闭防火墙. CentOS 7 是自带的firewall,CentOS 6 好像是iptables.关闭防火墙命令如下: 第一种方法是关闭防火墙: systemctl disable firewa ...
- 查询执行慢的SQL
--执行慢的SQL: SELECT S.SQL_TEXT, S.SQL_FULLTEXT, S.SQL_ID, ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (E ...
- 【spring cloud】【spring boot】项目启动报错:Cannot determine embedded database driver class for database type NONE
解决参考文章:https://blog.csdn.net/hengyunabc/article/details/78762097 spring boot启动报错如下: Error starting A ...
- sublime去除空白行和重复行
去除空白行 edit -> line -> delete blank lines 去除重复行 打开正则模式 1 edit-> sort lines 2 command+option+ ...
- git-ssh配置和使用
https://segmentfault.com/a/1190000002645623 1.设置Git的user name和email:(如果是第一次的话) $ git config --global ...
- vue v-model使用说明
1.概述 v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值而总是将 Vue 实例的数据作为数据来源.你应该通过 JavaScript 在组件的 data ...
- 编程算法 - 两个链表的第一个公共结点 代码(C)
两个链表的第一个公共结点 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 输入两个链表, 找出它们的第一个公共结点. 计算链表的长度, 然后移动 ...
- C/C++内存管理详解(转)
内存分配方式 简介 在C++中,内存分成5个区,他们分别是堆.栈.自由存储区.全局/静态存储区和常量存储区. 栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动 ...