PostgreSQL介绍及哪些开发框架中动用PostgreSQL数据库

最近准备下PostgreSQL数据库开发的系文化,本文将总的PPT内容通过博客记录分享,本随笔的重大内容是介绍PostgreSQL数据库的根基信息,以及哪以咱们的开发框架中使PostgreSQL数据库,希望大家多多提意见。

1、PostgreSQL数据库介绍

PostgreSQL是以加州大学伯克利分校计算机有关出的
POSTGRES,现在已更名为PostgreSQL。它兼具许多没错的风味:

开源:PostgreSQL
是一个随意之靶子-关系数据库服务器(数据库管理体系),它于活的
BSD-风格许可证下发行。

兼容性好:PostgreSQL 的表征覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99。

可靠性强:PostgreSQL标榜自己是社会风气上最先进的开源数据库。可靠性是PostgreSQL的嵩优先级。它因为坚如磐石的灵魂与出色的工程化而出名,支持大工作、任务关键型应用。

周边采取:自从MySQL被Oracle收购后,PostgreSQL逐渐成为开源关系项目数据库的首选,在力量上是到超过MySQL的一个开源数据库。

好支持:PostgreSQL对接口的支撑啊是非常丰富的,几乎支持所有品种的数据库客户端接;最丰富的数据类型的支撑,其中有些数据类型可以说连商
业数据库都非持有,比如IP类型和几哪类型等;

2、安装数据库和管理工具

数据库安装
PostgreSQL数据库(https://www.postgresql.org/download/windows/)

数据库管理工具
Navicat for PostgreSQL (如V11.1)

数据库建模工具
PowerDesigner (如V16.5)

 

数据库操作:

1)安装PostgreSQL数据库
2)安装Navicat for PostgreSQL管理数据库工具

3)安装PowerDesigner建模工具

4)在PowerDesigner创建一个大概的发明,获取表SQL,然后以Navicat
中执行脚本创建表,插入数据等。

3、PostgreSQL数据库语法

健康处理SQL,和其余数据库相同,如创建、删除表等常规操作。下面从网达到摘录部分有关PostgreSQL的周边操作。

1)表底概念:

  1. 创建表:

    CREATE TABLE products (
    product_no integer,
    name text,
    price numeric
    );

  2. 删除表:

    DROP TABLE products;

  3. 创立带有缺省值的发明:

    CREATE TABLE products (
    product_no integer,
    name text,
    price numeric DEFAULT 9.99 –DEFAULT是重要字,其后的数值9.99凡字段price的默认值。
    );

    CREATE TABLE products (
    product_no SERIAL, –SERIAL类型的字段表示该字段为自添字段,完全平等于Oracle中的Sequence。
    name text,
    price numeric DEFAULT 9.99
    );

  4. 约束:
    检查约是说明中最为常见的格类型,它同意你声明在某字段里的数值必须满足一个布尔表达式。不仅如此,我们吧堪声明表级别之检查约。

    CREATE TABLE products (
    product_no integer,
    name text,
    –price字段的价值必须大于0,否则在插入或涂改该字段值是,将吸引违规错误。还待证明的凡,该检查约
    –是匿名约束,即在表定义时没有出示命名该约束,这样PostgreSQL将会依据当前之表名、字段名和约束类型,
    –为该约束自动命名,如:products_price_check。
    price numeric CHECK (price > 0)
    );

    CREATE TABLE products (
    product_no integer,
    name text,
    –该字段的检讨约为显式命名为positive_price。这样做的补益在为后保护该约束时,可以根据该名进行直接操作。
    price numeric CONSTRAINT positive_price CHECK (price > 0)
    );

脚的约束是非空约束,即约束的字段不可知插入空值,或者是以已经起多少更新也空值。

CREATE TABLE products (
product_no integer NOT NULL,
name text NOT NULL,
price numeric
);
  1. 主键和外键:
    从技术上来讲,主键约束只是唯一约束与非空约束之成。

    CREATE TABLE products (
    product_no integer PRIMARY KEY, –字段product_no被定义也该表的唯一主键。
    name text,
    price numeric
    );

以及唯一性约束一样,主键可以以作用为多单字段,形成共同主键:

CREATE TABLE example (
a integer,
b integer,
c integer,
PRIMARY KEY (b, c)
);

外键约束声明一个字段(或者千篇一律组字段)的数值必须配合另外一个表中某些行出现的数值。
我们拿这作为称做简单单互相关表之间的参阅完整性。

CREATE TABLE orders (
order_id integer PRIMARY KEY, --该表也可以有自己的主键。
--该表的product_no字段为上面products表主键(product_no)的外键。
product_no integer REFERENCES products(product_no), 
quantity integer
);

当多个表之间是了主外键的参考性约束关系常,如果想抹被引用表(主键表)中之某行记录,由于该行记录的主键字段值可能正在让那引用表(外键表)中有修记下所干,所以去操作以见面失败。如果想做到这操作,一个阳的措施是先行去引用表中同该记录关联的行,之后再也删除被引用表中的该行记录。然而要验证的凡,PostgreSQL为咱提供了尤其有利于的主意形成此类操作。

CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);

CREATE TABLE orders (
order_id integer PRIMARY KEY,
shipping_address text
);

 CREATE TABLE order_items (
        product_no integer REFERENCES products ON DELETE RESTRICT, --限制选项
        order_id integer REFERENCES orders ON DELETE CASCADE, --级联删除选项
        quantity integer,
        PRIMARY KEY (product_no, order_id)
    );

范围和级联删除是片种最广大的抉择项。RESTRICT 禁止删除被引用的尽。 NO
ACTION 的意是若以自我批评约之时节,如果还存其他引用行,则委来左;
如果你切莫声明任何东西,那么它们就是短缺省的表现。(这有限只选择的骨子里分别是,NO
ACTION 允许约束检查推迟到工作的晚些时候,而 RESTRICT 不行。)
CASCADE声明在剔除一个于引述的行的时候,引用它的施行呢会叫电动删除掉。
在外键字段上之动作还有少数单选项: SET NULL 和 SET DEFAULT。
这样会导致在让引用行去的时节,引用它的字段分别设置也空或欠省值。
请注意这些选择并无能够被您躲开被观察与束缚之境地。比如,如果一个动作声明
SET DEFAULT,但是缺失省值并无可知满足外键,那么动作就是见面败。类似ON
DELETE,还有ON UPDATE
选项,它是在让引用字段修改(更新)的时光调用的。可用的动作是一律的。

2)表底改:

  1. 加字段:

    ALTER TABLE products ADD COLUMN description text;

增产的字段对于表中已经在的行而言最初拿事先填写充所给起底欠省值(如果你没声明DEFAULT子句,那么缺省是空值)。

以新添字段时,可以而且受该字段指定约束。

ALTER TABLE products ADD COLUMN description text CHECK(description <> '');
  1. 去字段:

    ALTER TABLE products DROP COLUMN description;

倘该表为被引用表,该字段为叫引述字段,那么地方的勾操作将会晤砸。如果假定惦记在去被引述字段的同时级联的删除该拥有援字段,可以运用下面的语法形式。

ALTER TABLE products DROP COLUMN description CASCADE;
  1. 增约:

    ALTER TABLE products ADD CHECK(name <> ”); –增加一个表级约束
    ALTER TABLE products ADD CONSTRAINT same_name UNIQUE(product_no);–增加命名的唯一性约束。
    ALTER TABLE products ADD FOREIGN KEY(pdt_grp_id) REFERENCES pdt_grps; –增加外键约束。
    ALTER TABLE products ALTER COLUMN product_no SET NOT NULL; –增加一个非空约束。

  2. 去约束:

    ALTER TABLE products DROP CONSTRAINT some_name;

对此显示命名的束缚,可以因该名目直接删除,对于隐式自动命名的封锁,可以透过psql的\d
tablename来得到该约束之讳。和去字段一样,如果您想去所有被指关系之牢笼,你需要用CASCADE。一个事例是某外键约束依赖让引用字段上的绝无仅有约束还是主键约束。

3)权限:
单纯有表的所有者才能够改要删除表的权限。要给予一个权力,我们下GRANT命令,要撤销一个权力,使用REVOKE命令。
用指出的是,PUBLIC是特殊”用户”可以用来将权限赋予系统被的诸一个用户。在声明权限的职务写ALL则将兼具的以及该对象类型相关的权限都赋予出去。

GRANT UPDATE ON table_name TO user; --将表的更新权限赋予指定的user。
GRANT SELECT ON table_name TO GROUP group; --将表的select权限赋予指定的组。
REVOKE ALL ON table_name FROM PUBLIC; --将表的所有权限从Public撤销。

初,只有靶所有者(或者超级用户)可以给或者撤回对象的权杖。但是,我们可以授予一个”with
grant
option”权限,这样虽让受权限的人数因为施该权限给另外人的权位。如果加之选项后来受裁撤,那么有那些由者接受者接受了权力的用户(直接或经过级连的授权)都以错过该权限。

4、数据库语法出入部分

1)特殊字段对应关系(部分)

2)分页处理
MySQL分页常见写法

select * from persons  limit 0,10;

起点位置为0,查询10长记下。

兼容MySQL与postgreSQL的写法

select * from persons limit 10 offset 0

自于点0开始询问,返回10修记下

 

3)其他类型
Guid生成(SQLServer 为newid() 函数)

PostgreSQL从9.1版本开始,执行下可以创造guid的函数

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
select uuid_generate_v4()

 

 

SQL限定符
Sqlserver为[],如Select [Name] from [User]
PostgreSQL为“”,如 Select “Name” from User

自打增长标识
SQLserver为 identity(1,1)
PostgreSQL使用SERIAL代替
SERIAL 对象的凡int4型(默认),bigserial类型对应int8类型
一个serial类型创建的班在那个所属字段被去除时,该队也拿于机关删除

函数
string || string
‘Post’ || ‘greSQL‘
lower(string)
lower(‘TOM’)
upper(string)
upper(‘tom’)
substring(string [from int] [for int])
substring(‘Thomas’ from 2 for 3)
to_char(timestamp, text)
to_char(current_timestamp, ‘HH12:MI:SS’)
to_timestamp(text, text)
to_timestamp(‘2016-10-29 12:27:05’, ‘YYYY-MM-DD HH24:MI:SS’)

current_date 今天底日期
current_time 现在的时光
current_timestamp 现在之日期及日
Localtime 今日底流年
Localtimestamp日期和时间
now() 当前底日期以及日(等效于 current_timestamp)

 

队操作函数
Nextval、currval、lastval、setval
任何函数
NULLIF
:当且单纯当value1和value2相等时,NULLIF才回去NULL。否则她回到value1。
GREATEST和LEAST :GREATEST和LEAST函数从一个无限制的数字表达式列表里甄选最要命或最好小的数值。

系统信息函数
current_database()当前数据库的讳
current_schema()当前模式的名
current_user目前行环境下的用户称
version() PostgreSQL版本信息
……

5、在开发框架中以PostgreSQL数据库

这属于多数据库支持的中间同样栽,我以前的随笔《以数据库访问项目遭到运用微软企业库Enterprise
Library,实现强数据库的支撑》
有略对多数据库的施用做了介绍,不过假如是基于多多少实现交汇的处理,那么尽管需要为框架的支行方式来兑现,通过代码生成工具Databasse2Sharp的迅猛生成,整个开发工作转移得尤为快捷与高速,而且各个分支的目统一好掌握。

俺们坐PostgreSQL数据库支持吧条例,在开框架上支撑这种支付,则有所以下特征:

1)框架底层以了微软企业库Enterprise Library作为底层数据库访问模块
2)多数据库支持,统一用公司库底数据库访问对象,操作一致
3)PostgreSQL开发同SQLServer开发进程一般
4)配置文件修改ComponentDbType为npgsql即可配置为PostgreSQL
5)数据库指向是当BaseBLL对象构建的时节兑现切换

点就是漫天框架数据访问层的完好计划和持续关系,我们于实际付出之下,我们好采用代码生成工具Database2Sharp进行快速支付,可以实现充分成框架底层和WInfrom界面或者Web界面等内容,从而得以兑现高效组合即可。

咱当付出实现PostgreSQL数据层对象的上,可以把其他数库层(如SQLServer的),然后修改对应的数目访问层基类和命名空间就可构造成PostgreSQL层了。

 

相关文章