【PostgreSQL】PostgreSQL入门解析


本章内容主要来源于网络各种渠道,侵删!

一、简单安装与使用

本章以 CentOS7 为例,进行安装PostgreSQL

官方下载地址:
https://www.postgresql.org/download/linux/redhat/

安装下载

# Install the repository RPM:
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm

# Install PostgreSQL:
yum install postgresql95-server

# Optionally initialize the database and enable automatic start:
/usr/pgsql-9.5/bin/postgresql95-setup initdb
systemctl enable postgresql-9.5
systemctl start postgresql-9.5

初始化并开启

postgresql-setup --initdb
systemctl enable postgresql.service
systemctl start postgresql.service

切换至postgres进行登录 psql

sudo -i -u postgres
psql / psql -d 数据库名

退出 psql

\q

二、常用数据类型

【1】数值类型

数据类型名 描述
integer 常用的整数
bigint 大范围整数
decimal 用户指定的精度,精确
serial 自增整数
bigserial 自增的大范围整数

【2】货币类型

数据类型名 描述
money 货币金额

【3】字符类型

数据类型名 描述
varchar(n) 变长,有长度限制
char(n) 定长,不足补空白
text 变长,无长度限制

【4】日期/时间类型

数据类型名 描述
date 只用于日期
timestamp 日期和时间(无时区)

【5】布尔类型

数据类型名 描述
boolean true/false

【6】枚举类型

枚举类型是一个包含静态和值的有序集合的数据类型

PostgtesSQL中的枚举类型类似于 C 语言中的 enum 类型

与其他类型不同的是枚举类型需要使用 CREATE TYPE 命令创建

CREATE TYPE language AS ENUM ('java', 'scala', 'python');
CREATE TYPE week AS ENUM ('Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun');

就像其他类型一样,一旦创建,枚举类型可以用于表和函数定义

CREATE TYPE language AS ENUM ('java', 'scala', 'python');

CREATE TABLE person (
    name text,
    like_language  language 
);

INSERT INTO person VALUES ('zs', 'java');

SELECT * FROM person WHERE like_language  = 'java';

 name | like_language
------+--------------
 zs	  | java
(1 row)

【7】网络地址类型

数据类型名 描述
cidr IPv4 或 IPv6 网络
inet IPv4 或 IPv6 主机和网络
macaddr MAC 地址

【8】JSON 类型

以下方式会丢失列名:
SELECT row_to_json(row(name)) FROM person;
以下方式不会丢失列名
SELECT row_to_json(t) FROM (select name,like_language from person) as t;

【9】数组类型

PostgreSQL 允许将字段定义成变长的多维数组,数组类型可以是任何基本类型或用户定义类型,枚举类型或复合类型

声明数组
创建表的时候,我们可以声明数组,方式如下:

CREATE TABLE tmp (
    name            text,
    likes  			text[],
    seat        	integer[][]
);

likes为一位字符数组、seat为二维数值类型数组
我们也可以使用 “ARRAY” 关键字

CREATE TABLE tmp (
    name            text,
    likes  			ARRAY[4],
    seat        	integer[][]
);

三、数据库的定义

【1】创建数据库

PostgreSQL 创建数据库可以用以下三种方式:

  • 1、使用 CREATE DATABASE SQL 语句来创建
  • 2、使用 createdb 命令来创建
  • 3、使用 pgAdmin 工具

1、CREATE DATABASE 命令需要在 PostgreSQL 命令窗口来执行,语法格式如下:

CREATE DATABASE dbname;

2、createdb 是一个 SQL 命令 CREATE DATABASE 的封装,createdb 命令语法格式如下:

createdb [option...] [dbname [description]]

参数说明:
dbname:要创建的数据库名。
description:关于新创建的数据库相关的说明。
options:参数可选项,可以是以下值:

选项 描述
-D 指定数据库默认表空间
-e 将 createdb 生成的命令发送到服务端
-E 指定数据库的编码
-l 指定数据库的语言环境
-T 指定创建此数据库的模板
–help 显示 createdb 命令的帮助信息
-h 指定服务器的主机名
-p 指定服务器监听的端口,或者 socket 文件
-U 连接数据库的用户名码
-w 忽略输入密码
-W 连接时强制要求输入密码

3、使用 pgAdmin 工具
在这里插入图片描述

【2】显示所有数据库

\l
或
SELECT * FROM pg_database;

【3】切换数据库

\c 数据库名

【4】删除数据库

drop database  [ IF EXISTS ] 数据库名;
或
dropdb [connection-option...] [option...] dbname  和创建时的参数大同小异

四、表的定义

【1】创建表

1、创建普通表
create table 表名
(
   字段 类型,
   字段 类型,
   ....
);

2、创建有自增、缺省值的表
create table  表名
(
   字段 类型 serlar, -- serlar类型的字段表示该字段为自增字段
   字段 类型 default 值,  -- default是关键字,后面的值代表字段的默认值
   ....
);

3、创建带有约束的表
3.1、check 约束
create table  表名
(
   字段 类型,
   字段 类型  check(条件) -- check约束表示 字段必须满足约束里的条件
   ....
);

3.2、constraint  约束
create table  表名 
(
   字段 类型,
   字段 类型 constraint 新字段名 -- 该字段的检查约束被显示命名为新字段名,这样做好处在于今后维护该约束时,可以根据该名进行直接操作
);

3.3、非空 约束
create table  表名 
(
   字段 类型 not null,
   字段 类型
);

3.4、唯一 约束
create table  表名 
(
   字段 类型 unique,
   字段 类型
);

create table  表名 
(
   字段 类型,
   字段 类型,
   unique(字段,字段...)
);

【2】创建带有主键和外键的表

1、主键
create table  表名 
(
   字段 类型 PRIMARY KEY,
   字段 类型 
);

 create table  表名 
(
   字段 类型,
   字段 类型,
   PRIMARY KEY(字段,字段)
);

2、外键
create table  表名 
(
   字段 类型 PRIMARY KEY,
   字段 类型 REFERENCES 关联外键表名(外键字段)
);

 create table  表名 
(
   字段 类型,
   字段 类型,
   PRIMARY KEY(字段,字段),
   FOREIGEN KEY(字段,字段) REFERENCES 关联外键表名(外键字段,外键字段)
);

【3】创建表时的限制、级联删除选项

 create table  表名 
(
   字段 类型 REFERENCES 关联外键表名 ON DELETE RESTRICT, -- 限制选项
   字段 类型 REFERENCES 关联外键表名 ON DELETE CASCADE -- 级联删除选项
 );

解释:
限制 和 级联删除 是两种最常见的选项
RESTRICT 禁止删除被引用的行
NO ACTION 的意思是如果在检查约束的时候,如果还存在任何引用行,则抛出错误; 如果你不声明任何东西,那么它就是缺省的行为
RESTRICT 和 NO ACTION 的实际区别是,NO ACTION 允许约束检查推迟到事务的晚些时候,而 RESTRICT 不行CASCADE 声明在删除一个被引用的行的时候,引用它的行也会被自动删除掉。
在外键字段上的动作还有两个选项: SET NULL 和 SET DEFAULT; 这样会导致在被引用行删除的时候,引用它们的字段分别设置为 空 或者 缺省值。 ( 请注意这些选项并不能让你逃脱被观察和约束的境地。比如,如果一个动作声明 SET DEFAULT,但是缺省值并不能满足外键,那么动作就会失败。类似ON DELETE,还有ON UPDATE 选项,它是在被引用字段修改(更新)的时候调用的,可用的动作是一样的)

【4】删除表

drop table  表名;

【5】查看表结构

\d 表名

【6】修改表

1、增加字段
alter table 表名 add column 字段名 类型 [约束条件];

2、删除字段
alter table 表名 drop column 字段名;

如果删除的是外键字段,想要强制删除,则需要使用以下语句
alter table 表名 drop column 字段名 cascade;

3、修改字段名
alter table 表名 rename column 旧字段名 to 新字段名;

4、修改字段类型
alter table 表名 alter column 字段名 type 类型;

5、修改表名
alter table 表名 rename to 新表名;

6、修改字段的缺省值
在为已有字段添加缺省值时,不会影响任何表中现有的数据行,它只是为将来insert命令改变缺省值
alter table 表名 alter column 字段名 set default 值;

删除缺省值
alter table 表名 alter column 字段名 drop default;

7、增加约束
alter table 表名 add check(条件);  -- 添加一个表级约束
alter table 表名 add foreign key(字段) references 外键表(外键字段);  -- 添加外键约束
alter table 表名 alter column 字段 set not null;  -- 添加非空约束
alter table 表名 add constraint 约束名 unique(sid); -- 添加唯一约束

8、删除约束
对于显示命令的约束,可以直接根据其名字进行删除;对于隐式自动命令的约束,可以通过 psql 的 \d 表名 
来获取该约束的名字。和删除字段一样,如果你想删除有着被依赖关系地约束,你需要用 cascade

和其他约束不同的是,非空约束没有名字,所以只能通过以下方式进行删除
alter table 表名 alter column 字段 drop not null

【7】查看当前库的所有表

\d 

四、数据插入与查询

INSERT INTO 语句语法格式如下:

INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);

SELECT 语句语法格式如下:

SELECT column1, column2,...columnN FROM table_name;

查询和Hive大同小异

五、权限

只有表的所有者才能修改或者删除表的权限
要赋予一个权限,我们使用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"权限,这样就给接受权限的人以授予该权限给其它人的权限。如果授予选项后来被撤销,那么所有那些从这个接受者接受了权限的用户(直接或者通过级连的授权)都将失去该权限

六、PostgreSQL 高级

【1】PostgreSQL 连接(JOIN)

在 PostgreSQL 中,JOIN 有五种连接类型:

CROSS JOIN :交叉连接
INNER JOIN:内连接
LEFT OUTER JOIN:左外连接
RIGHT OUTER JOIN:右外连接
FULL OUTER JOIN:全外连接

【2】PostgreSQL 触发器

PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用

PostgreSQL 触发器可以在下面几种情况下触发:

  • 在执行操作之前(在检查约束并尝试插入、更新或删除之前)
  • 在执行操作之后(在检查约束并插入、更新或删除完成之后)
  • 更新操作(在对一个视图进行插入、更新、删除时)

其实数据库的大部分操作都是非常相似的,所以PostgreSQL 的操作就总结这么多,其他的和Hive都大同小异,更多的PostgreSQL 操作请点击 菜鸟教程进行详细查看!

猜你喜欢

转载自blog.csdn.net/qq_43733123/article/details/107509480