PostgreSQL
文章平均质量分 59
万里归来少年心
这个作者很懒,什么都没留下…
展开
-
PostgreSQL外键为空(null)
本文通过实例,验证了PostgreSQL外键可以为空(null)。1.建表 商品表create table goods(id int primary key); 订单表create table orders(id int,goodid int references goods(id) );2.插入数据 订单表中,试图插入不存在的商品...原创 2019-05-09 11:48:38 · 1358 阅读 · 0 评论 -
postgreSQL中的内连接和外连接
1.建表 create table person ( presonId int, presonName varchar(20) ); create table city ( cityId int, cityName varchar(20) );2.插入数据 insert into person values(1,'April'),(3,'Harris...原创 2018-10-24 20:43:20 · 4322 阅读 · 0 评论 -
测试PostgreSQL行级锁
1.打开三个psql窗口,连接到postgreSQL数据库 查看窗口连接到的服务进程的pid。select pg_backend_pid(); 2.在第一个窗口更新一行数据mydb=# begin;BEGINmydb=# select * from student where id =1 for update;+----+-------+| i...原创 2018-10-25 15:29:20 · 2821 阅读 · 0 评论 -
postgreSQL中的virtualxid, transactionid, virtualtransaction
在postgreSQL中,描述事务ID的字段有三个:virtualxid, transactionid, virtualtransaction。它们的含义分别如下:名称 含义 virtualxid 虚拟事务ID。如果对象虚拟事务,则此值为null。 transactionid 事务ID。如果对象不是事务,则此值为mull。 virtualtransacti...原创 2018-10-25 12:09:25 · 3634 阅读 · 0 评论 -
测试postgreSQL中表锁
1.打开三个psql窗口,连接到postgreSQL数据库。 查看窗口连接到的服务进程的pid。select pg_backend_pid(); 三个窗口的pid分别如下: 2.在第一个窗口锁定一张表mydb=# begin;BEGINmydb=# lock table person;LOCK TABLE3.在第三个窗口查看数据库...原创 2018-10-25 11:38:50 · 1061 阅读 · 0 评论 -
PostgreSQL中的两阶段提交
在分布式系统中,事务往往包含了多台数据库上的操作。多台数据库之间的原子性,需要通过两阶段提交协议来实现。 两阶段提交协议的步骤:(1)应用程序调用事务协调器中的提交方法。(2)事务协调器将联络事务中涉及的所有数据库,通知它们准备提交事务(PREPARE TRANSACTION)。(3)数据库收到通知后,确保后续在被要求提交事务时能提交,或在被要求回滚事务时能回滚,则返...原创 2018-10-17 18:29:35 · 3118 阅读 · 0 评论 -
PostgreSQL中事务的隔离级别
数据库事务的隔离级别有以下四种:(1)读未提交(READ UNCOMMITTED)(2)读已提交(READ COMMITTED)(3)重复读(REPEATABLE READ)(4)串行化(SERIALIZABLE) 对于并发事务,我们不希望发生的行为如下:(1)脏读:一个事务读取了另一个未提交的事务写入的数据。(2)不可重复读:一个事务重新读取前面读取过的...原创 2018-10-17 14:34:45 · 1589 阅读 · 0 评论 -
PostgreSQL的XML类型
xml类型用于存储XML数据。使用字符串也可以存储XML数据,但不能保证其合法性。支持xml类型后,数据库会对数据进行合法性检查,同时提供函数进行类型安全性检查。1.xml类型 xml类型中存储数据有两种:documents和content。content可以有多个顶级元素,documents只能有一个顶级元素。默认情况下是content。 查看当前的存储类型:...原创 2018-10-10 19:04:56 · 7074 阅读 · 0 评论 -
PostgreSQL复合类型
1.定义复合类型 定义中声明字段名称和类型,但不能声明约束(如not null)。注意不要忘记关键字AS。 CREATE TYPE person AS ( name varchar(20), age int);2.建表CREATE TABLE student ( id int, information person);3.插入数据i...原创 2018-10-10 16:50:48 · 1307 阅读 · 0 评论 -
PostgreSQL几何类型的操作符(二)缩放/旋转 “*”、"/"
缩放/旋转是二元运算符,运算符的左值的类型可以是“point”、“box”、“path”、“circle”,运算符右值只能是“point”。 点与点之间的加减乘除相当于两个复数之间的加减乘除。select point'(1,2)' * point'(10,20)'; select point'(1,2)' / point'(10,20)'; 如果乘数...原创 2018-10-10 14:42:42 · 589 阅读 · 0 评论 -
PostgreSQL几何类型的操作符(一)平移“+”、"-"
平移是二元运算符,运算符的左值的类型可以是“point”、“box”、“path”、“circle”,运算符右值只能是“point”。1.点与点运算 点与点之间的加减乘除相当于两个复数之间的加减乘除。select point'(1,2)' + point'(10,20)'; select point'(1,2)' - point'(10,20)'; ...原创 2018-10-10 14:16:44 · 1266 阅读 · 0 评论 -
PostgreSQL中的几何类型
PostgreSQL主要支持一些二维的几何数据类型,如点(point)、直线(line)、线段(lseg)矩形(box)、路径(path)、多边形(polygon)、圆(circle)等。 本文将详细介绍几何类型的输入。注:每个类型有几种等价输入形式。1.点(point)select '1,1'::point;select '(1,1)'::point; 2...原创 2018-10-10 11:24:38 · 5092 阅读 · 4 评论 -
测试PostgreSQL的连接池
在ado.net中,每个应用程序都维护一个连接池。每次用户连接数据库时,会先尝试从连接池中获取连接,如果获取成功则直接使用,如果失败则新建连接。线程池减少了连接数据库的时间。注:函数close()并没有真正关闭连接,而是将对象放入连接池中。 下面使用简单的程序,测试线程池的作用。在两百次循环中,执行数据库的打开与关闭,在启用和禁用连接池的情况下,分别统计其执行时间。 首先,...原创 2019-01-23 09:45:43 · 6805 阅读 · 1 评论 -
PostgreSQL中NpgsqlParameter的用法
本文主要介绍PostgreSQL数据库中NpgsqlParameter的用法。(MySql中MySqlParameter的用法与之类似) 首先,为什么要用NpgsqlParameter?那就要先分析直接执行SQL语句的风险了。 执行一个查询语句,目的是在表ModelInfo中查询ModelName等于某一值的行数目,该值由用户输入。代码如下:static void Main(...原创 2019-01-23 13:50:27 · 4182 阅读 · 0 评论 -
Centos安装与卸载PostgreSQL
1.安装 默认的yum 安装命令如下: yum install postgresql 该命令会安装较低版本的PostgreSQL 8.4,具体过程如下:[root@April ~]# yum install postgresqlLoaded plugins: fastestmirror, securityDetermining fastest mirrors ...原创 2019-04-02 11:14:54 · 7080 阅读 · 0 评论 -
将NpgsqlDataReader转换为DataTable
1.建表 create table city ( Id int, Name varchar(20) );2.插入数据 insert into city values(1,'BeiJing'),(2,'NewYork'),(3,'Hong kong'),(4,'ShaingHai');3.Npgsql获取数据集using Npgsql;using Syste...原创 2019-04-18 17:37:50 · 1767 阅读 · 0 评论 -
Npgsql获取自定义函数(function)返回的数据集
1. 建表 create table city ( Id int, Name varchar(20) );2.插入数据 insert into city values(1,'BeiJing'),(2,'NewYork'),(3,'Hong kong'),(4,'ShaingHai');3.自定义函数create or replace function get...原创 2019-04-18 15:46:29 · 804 阅读 · 0 评论 -
PostgreSQL中自定义函数(function)返回数据集
1.准备数据 建表 create table city ( cityId int, cityName varchar(20) ); 插入数据 insert into city values(1,'BeiJing'),(2,'NewYork'),(3,'Hong kong'),(4,'ShaingHai');2. 函数实例2.1setof 表...原创 2019-04-18 10:46:10 · 11952 阅读 · 0 评论 -
Postgres 数据存储位置
PostgresQL 存储数据于data文件夹下,本人的目录为: C:\Program Files\PostgreSQL\10\data。 其中,每个数据库都会在base 文件夹下有一个子文件夹,且子文件夹以数据库的oid命名。数据库的oid可以通过表pg_database获取。Testpg=# select oid, datname from pg_dat...原创 2019-04-03 14:21:16 · 7272 阅读 · 1 评论 -
pgbench的简单测试
1.数据初始化[root@April ~]# /usr/pgsql-9.2/bin/pgbench -i mydb -U postgresNOTICE: table "pgbench_branches" does not exist, skippingNOTICE: table "pgbench_tellers" does not exist, skippingNOTICE: t...原创 2019-04-02 18:55:55 · 811 阅读 · 0 评论 -
FATAL: Peer authentication failed for user "postgres" 解决方法
使用如下命令创建数据库mydb时,会抛出错误:[root@April ~]# createdb mydb createdb: could not connect to database template1: FATAL: role "root" does not exist mydb是待创建的数据库名称,root是用户名。由于在postgreSQL数据库中没有名为root...原创 2019-04-02 18:20:41 · 6931 阅读 · 0 评论 -
pgbench的编译和安装
PostgreSQL数据库提供了一款轻量级的压力测试工具pgbench。pgbench通常会开多个数据库 Session, 并且在测试最后形成测试报告,得出每秒平均事务数。pgbench可以测试 select,update,insert,delete 命令。 安装环境:CentOS 6.5 (Final),PostgreSQL9.2.24,virtualbox 5.2.18 。...原创 2019-04-02 16:03:38 · 3034 阅读 · 0 评论 -
configure: error: readline library not found 解决方法
安装postgreSQL出现错误提示 configure: error: readline library not found。 解决方法:yum install readline-devel 详细过程如下:[root@April postgresql-9.2.24]# yum install readline-develLoaded plugins: fast...原创 2019-04-02 15:05:35 · 9039 阅读 · 0 评论 -
configure: error: zlib library not found 解决方法
安装postgreSQL出现错误提示 configure: error: zlib library not found。 解决方法:yum install zlib-devel 详细过程如下:[root@April postgresql-9.2.24]# yum install zlib-devel;Loaded plugins: fastestmirror, ...原创 2019-04-02 15:01:18 · 24566 阅读 · 0 评论 -
PostgreSQL版本信息
1.版本详细信息postgres=# select version(); version ------------------------------------------------------...原创 2019-04-02 13:57:09 · 1316 阅读 · 0 评论 -
Centos中PostgreSQL常用命令
1 查看[root@April ~]# rpm -qa|grep postgresqlpostgresql92-9.2.24-5PGDG.rhel6.i686postgresql92-libs-9.2.24-5PGDG.rhel6.i686postgresql92-server-9.2.24-5PGDG.rhel6.i686postgresql92-contrib-9.2.24-5P...原创 2019-04-02 13:11:08 · 3370 阅读 · 0 评论 -
PostgreSQL中的枚举类型(Enum)
在PostgreSQL中,需要先使用create type 创建枚举类型。1.创建枚举类型create type week as enum('Sun','Mon','Tues','Wed','Thur','Fri','Sat');2.创建表create table duty( person text, weekday week);3.插入数据...原创 2018-10-10 09:39:57 · 14555 阅读 · 0 评论 -
PostgreSQL中的反转索引(GIN)
索引是一种快速查询数据的方法,它记录了表中一列或多列与其物理位置之间的对应关系。常用的索引有B-tree,Hash等。本文将介绍GIN,即:反转索引。 反转索引(GIN)可以处理包含多个键的值,如数组。可以通过定义GIN索引的特定操作符实现不同的功能。GIN的标准中定义了用于一维数组的操作符,如包含“@>”,被包含“<@”,相等“=”,重叠操作符“&&...原创 2018-09-30 16:35:41 · 2835 阅读 · 0 评论 -
PostgreSQL执行计划(一)命令参数
用explain命令显示SQL的执行计划,命令格式如下:explain [option] statement; 其中,option是命令的可选选项,包括:analyze boolean 通过实际执行SQL获得相应的执行计划 verbose boolean 显示执行计划的附件信息 costs boolean 显示计划节点的启动成...原创 2018-09-25 17:43:05 · 2019 阅读 · 1 评论 -
PostgreSQL中的约束
在PostgreSQL中,约束的种类有:检查约束 非空约束 唯一约束 主键 外键检查约束 检查约束是最常见的约束类型,形式为“CHECK(表达式)”。使用该约束后,字段的值就必须保证这个约束的表达式为真,否则无法插入数据。 CREATE TABLE books ( id int CHECK(id>0), name varchar(20), ...原创 2018-09-14 17:42:22 · 1097 阅读 · 0 评论 -
PostgreSQL分区表
表分区就是把逻辑上的一个大表分割成物理上的几个小块。表分区能够快速的删除历史数据,提高查询性能。下面我们将讲述分区表的创建过程。 创建一个学生表,按照学生的成绩对该表分区。插入学生信息时,根据成绩将信息存入不同的分区表中。1.创建“父表” 所有分区都从“父表”继承,通常情况下,“父表”没有数据。 学生信息包括学号,姓名和成绩。CREATE TABLE ...原创 2018-09-19 19:01:45 · 2165 阅读 · 0 评论 -
psql常用命令
psql是PostgreSQL中的命令行工具。键入命令,发送给PostgreSQL服务器,显示命令结果。\d命令 显示每个匹配关系(表、视图、索引、序列等)的信息。命令 含义 \dt 只显示匹配的表 \di 只显示索引 \ds 只显示序列 \dv 只显示视图 \df 显示函数 \dn 显示所有的schema...原创 2018-09-18 13:18:25 · 1647 阅读 · 0 评论 -
PostgreSQL表空间
表空间可以把不同的表放到不同的存储介质或文件系统下。在PostgreSQL中,表空间实际上是为表指定一个存储目录。 创建表空间CREATE TABLESPACE tbs location 'D:\sqlTest'; 创建数据库时,指定默认的表空间,以后在该数据库中创建表、索引时,就可以自动存储到这个表空间下。CREATE DATABASE myDB TABL...原创 2018-09-17 17:34:15 · 2603 阅读 · 0 评论 -
PostgreSQL主键、外键、序列
1.创建数据库 创建名称为StudentInfo的数据库。 注:1.CREATE DATABASE不一定非要大写,用create database也可以成功创建数据库。 2.双引号保持了StudentInfo的大小写。可以不加双引号,此时创建的数据库名称为studentinfo。CREATE DATABASE "StudentInfo";2.切...原创 2018-09-10 15:26:50 · 8156 阅读 · 0 评论 -
数据库中truncate与delete的区别
在数据库中,有两种方法清空表中的数据:truncate与delete。如:想要清空Course表,下列两个语句都能实现。TRUNCATE TABLE "Course" ;DELETE FROM "Course" ; 那么,truncate与delete有哪些区别呢? 1.truncate 是DDL(数据定义)语句,相当于重新定义一张新表,把原先的表丢弃了,所以...原创 2018-09-12 11:10:23 · 5677 阅读 · 0 评论 -
PostgreSQL表继承
PostgreSQL支持表继承,这是它特有的功能。1.建表 例:创建person表作为父表,student表是继承它的子表。 CREATE TABLE person ( id int, name varchar(20)); CREATE TABLE student ( classId int)INHERITS(person); 执行...原创 2018-09-15 16:36:49 · 5871 阅读 · 1 评论 -
Entity Framework 用反射获取表名及列名
namespace Xbim.IO.PostGre{ [Table("Entities")] public class EntityDef { [Key] [Column("Label")] public Int64 Label { get; set; } [Column("Type")] p...原创 2018-06-27 18:37:18 · 4137 阅读 · 0 评论 -
Entity Framework 表的创建和增删改查
1.实体与表的映射 创建一个表,表的的名称是“Entities”,表有两列“Label”和“Type”,类型分别为int64和int32。[Table("Entities")] public class EntityDef { [Key] [Column("Label")] public Int64 Label { ge...原创 2018-06-01 18:41:21 · 1217 阅读 · 0 评论 -
Entity Framework中的DatabaseGenerated
在数据库中建表的时候,配置列属性DatabaseGenerated的值为DatabaseGeneratedOption.None。为了弄清楚这个属性的含义,查阅了相关资料。 [Table("Entities")] public class PgEntity { [Key,DatabaseGenerated(DatabaseGeneratedOption.None)] ...原创 2018-05-30 08:57:17 · 5793 阅读 · 0 评论 -
PostgreSQL执行计划(二)扫描类型
1. 全表扫描(seq scan) 把表的所有数据块从头到尾读一遍,找到符合条件的数据。 explain select * from "Family1" where "ID" > 4;2.索引扫描(Index Scan) 在索引中找到需要的数据行的物理位置,然后再到表的数据块中把相应的数据读出来。 explain select * from "Fami...原创 2018-09-25 19:35:33 · 738 阅读 · 0 评论