postgresql存储过程

SQL、T-SQL与PL-SQL的区别

萝らか妹 提交于 2020-01-31 01:58:54
本文针对目前最新版9.5.1,若非说明,文中所说文档即指官方文档。本人刚接触PostgreSQL不久,文中不免错漏,请大家指正;随着了解深入,本文[可能]会不定期更新补足。 JSON PostgreSQL支持Json格式数据,有两种类型:json和jsonb。两者在效率上有所区别,而这是因为jsonb存储的是格式化后的二进制数据,所以在写入时,json类型比较快,而在检索时(注意这里说的检索不是简单的读取整个数据,而是比如检索json数据中某个键的值的场景),jsonb效率较高。一般情况下,使用jsonb就可以了。json数据是为了弥补关系型数据在伸缩性扩展性上的不足,但是文档也说了,不能啥都往里放,要考虑数据原子性和数据大小。 json类型可以作包含判断和是否存在的判断(containment or existence),表示符号分别为@>和?(以及其它一些变种)。对于这两种牵涉到多个键和元素的判断场景,json类型比下面要讲的arrays更适合,因为其对查询有内在的优化机制,而array只是单纯的线性查找。 若json列需要经常检索,那么可以在其上建立GIN索引,jsonb支持两种特有的GIN索引jsonb_ops和jsonb_path_ops。创建的语法如下: CREATE INDEX idxgin ON api USING GIN (jdoc); CREATE INDEX

PostgreSQL简介

别等时光非礼了梦想. 提交于 2020-01-18 23:14:51
PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它在其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server之外,为用户又提供了一种选择。 PostgreSQL 不寻常的名字导致一些读者停下来尝试拼读它,特别是那些把SQL拼读为"sequel"的人。PostgreSQL 开发者把它拼读为 "post-gress-Q-L"。(Audio sample,5.6k MP3)。它也经常被简略唸为 "postgres"。 历史 PostgreSQL 经历了长时间的演变,开始于在 UC Berkeley 的 Ingres 计划。这个计划的领导者 Michael Stonebraker 在1982年离开 Berkeley 去商业化 Ingres,但是最后还是返回了学术界。在1985年返回 Berkeley 之后,Stonebraker 开始了 post-Ingres 计划来致力于在 1980 年代早期变得日益清楚的、当代数据库系统的问题。Postgres 和 Ingres 的代码库开始(并保持)完全分离了。 结果的计划叫 Postgres ,目标是介入增加对类型的完全支持所需要的最小数目的特征

CentOS 6安装PostgreSQL

ぃ、小莉子 提交于 2020-01-18 23:10:58
https://zh.wikipedia.org/wiki/PostgreSQL PostgreSQL 是 自由的 对象-关系型数据库 服务器( 数据库管理系统 ),在灵活的 BSD-风格许可证 下发行。它在其他开放源代码数据库系统(比如 MySQL 和 Firebird ),和 专有 系统比如 Oracle 、 Sybase 、IBM的 DB2 和 Microsoft SQL Server 之外,为用户又提供了一种选择。 PostgreSQL不寻常的名字导致一些读者停下来尝试拼读它,特别是那些把 SQL 拼读为"sequel"的人。PostgreSQL开发者把它拼读为"post-gress-Q-L"。( Audio sample ,5.6k MP3)。它也经常被简略念为"postgres"。 在PostgreSQL中程序员可以用一组可观的支持语言中任何一种来写这种逻辑。 类似于Oracle的过程语言 PL/SQL 的叫做 PL/PgSQL 的内置语言,在处理查询密集的过程时提供了独特的优势。 流行脚本语言比如 Perl , Python , Tcl ,和 Ruby 的包装器,允许利用它们在字符串处理和连接到广阔的外部函数库的力量。 需要把复杂逻辑编译到机器代码所能提供的高性能的过程可以利用 C 或 C++ 。 在更加 深奥 的方面, R

myBatis调用postgreSQL存储过程

坚强是说给别人听的谎言 提交于 2019-12-24 04:24:31
1.调用没有OUT参数的存储过程: 创建存储过程: create or replace function get_code(a1 varchar(32)) returns varchar(32) as $$       declare the_result varchar(32);       begin       the_result := name from t_project where id = a1;         return the_result;         end;       $$     language plpgsql; sqlMap配置文件: <select id="f1" resultType="String" parameterType="map" statementType="CALLABLE" useCache="false"> <![CDATA[ select get_code( #{a1,mode=IN,jdbcType=VARCHAR} ) ]]> </select> 注:不使用OUT参数的存储过程可以直接用 select 程序: public String generateCode(String a1) { Map<String,String> paramMap = new HashMap<String,String>();

postgresql 学习笔记

随声附和 提交于 2019-12-05 11:37:25
SQL 入门语言 3.1 SQL(Structured Query Lanuage) 特点:它是结构化查询语句,重要的关系型数据库操作语言。PgSQql 的基础语法也同样适用于其他的关系型数据库如:mysql、oracle等 3.1.1 语法分类 Sql命令一般分为DQL、DML、DDL、DCL几类;其中, DQL:数据查询语句,一般是select开始的 DML(Data Manipulation Language):数据操纵语句。如:insert、delete、update DDL(Data Definition Language):数据定义语句。如新建表、库、删除、修改以及索引的语句 DCL:数据控制语句。如:commit、 rollback 3.1.2语法结构 每次执行的语句可以由多条Sql组成,用 ;分隔即可。Sql是由一系列记号组成,这些记号可以是关键字、标识符、双引号包围的标识符、常量、单引号包围的文本常量和特殊字符等。 可以有注释,相当于空白。 查询基本语法: Select +要查询的列+ from+表名+ where 查询条件 3.2 DDL 语句 DDL是新建表、修改、删除表的语句 3.3.1 新建表 表是关系型数据库最基本的对象。类似于二维表格 -- 数据库的增删改 create database YSC_test; drop database YSC_test

postgresql:给表添加触发器

落花浮王杯 提交于 2019-12-03 22:36:55
触发器功能:向user表中插入一条数据,如果表中没用数据,则字段created_by必须为空;表中有数据则created_by必须不为空. 新建储存过程函数; CREATE OR REPLACE FUNCTION public.onaddfirst() RETURNS trigger LANGUAGE plpgsql AS $function$ DECLARE total integer; BEGIN SELECT count(*) INTO total FROM public.user; IF total != 0 THEN IF NEW.created_by IS NULL THEN RAISE EXCEPTION 'created_by cannot be null'; END IF; ELSE IF NEW.created_by is not NULL THEN RAISE EXCEPTION 'created_by must be null when you insert first user'; END IF; END IF; RETURN NEW; END; $function$; 添加触发器 -- DROP TRIGGER onadd ON public."user"; create trigger onadd before insert on public.

PostgreSQL与MySQL比较

試著忘記壹切 提交于 2019-12-02 05:23:39
本帖最后由 osdba 于 2011-04-21 16:33 编辑 特性 MySQL PostgreSQL 实例 通过执行 MySQL 命令(mysqld)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。 通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。一台机器上可以启动多个实例。 数据库 数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。 数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。 数据缓冲区 通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置

PostgreSQL 与 MySQL 相比,优势何在?

我只是一个虾纸丫 提交于 2019-12-01 08:46:17
一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。 二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(5.5版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。 三、 PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。 四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的操作,这个和PGSQL的MVCC实现有关系。 五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。 六、 PG有极其强悍的 SQL 编程能力(9.x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法

PostgreSQL 常用工具

吃可爱长大的小学妹 提交于 2019-11-30 12:02:53
文章目录 管理/开发工具 备份与恢复 集群和复制 驱动和接口 PostgreSQL 衍生版 PostgreSQL 扩展插件 外部数据库 存储过程相关 管理/开发工具 pgAdmin4 ,基于 Web 的 PostgreSQL 图形管理和开发工具。 phpPgAdmin ,基于 Web 的 PostgreSQL 图形管理工具。 TeamPostgreSQL ,基于 Web 的 PostgreSQL 图形管理和开发工具。 pgAgent ,PostgreSQL 后台作业调度代理程序。 PGC ,一个命令行工具,用于 PostgreSQL 和相关项目的安装、更新和管理。 pg_partman ,PostgreSQL 分区管理工具。 pgAudit ,为 PostgreSQL 提供详细的会话/对象操作审计日志。 pg_cron ,基于 cron 的后台作业调度程序。 Ora2Pg ,Oracle/MySQL 到 PostgreSQL 迁移的免费工具。 pgloader ,支持各种数据源到 PostgreSQL 的数据加载和迁移。 ERBuilder ,Windows 平台数据库建模工具,支持各种主流的数据库。 pgModeler ,PostgreSQL 数据库建模工具,支持跨平台。 pgFormatter ,SQL 语法格式化工具。 pgBadger ,PostgreSQL 日志分析工具。

PostgreSQL大小写的坑

烈酒焚心 提交于 2019-11-28 07:25:06
前景:之前听前辈们说过postgresql大小写敏感,觉得自己注意应该也不是啥事。今天用postgresql写存储过程,以前的命名习惯,喜欢全大写,然后调用的存储过程名写的大写也提示找不到,然后开始试验了下表名、字段、函数等名大写或驼峰命名,发现postgresql的大小写规则可以用“混乱”形容。当然“混乱”不是指postgresql没定义清楚,是指我这程序员的思维理解起来不那么舒服。 Part1:我试验了各种大小写以及调用后的现象 1)建立了大写的表NODE,查询不论是用NODE还是node都不行,需用"NODE"才可识别。   正确语句:select * from "NODE" 2)建立了小写的表edge,查询不论是用EDGE还是edge都可以(额,说好的大小写敏感呢),"edge"也可识别。 正确语句:select * from edge 或 EDGE 或"edge" 3)存储过程测试结论与表名一样。 大写的存储过程TP_INSERT需用call "TP_INSERT"();来调用。 小写的存储过程tp_select,可用call tp_select(); 或 call TP_SELECT();或call "tp_select"(); 来调用 4)在NODE表中建立字符型name,Name,NAME三个字段(居然能建成功),对应插入值'lili','Lili','LILI'。