PostgreSQL基础知识分享

  1. 架构

PostgreSQL是一个关系数据库,采用c/s架构。一个PostgreSQL会话包括:

服务端进程——postgres:用于管理数据库文件,并接受来自客户端的数据库连接, 同时代替客户端执行数据库操作。
客户端
  1. 命令

(1)创建数据库

createdb -U postgres mydb

(2)连接数据库

psql -U postgres mydb

(3)元命令(内部命令)

\h 可以查看SQL命令语法上的说明,后面不加SQL命令,会列出所有SQL命令
\? 可以查看所有的元命令
\l 查看所有数据库
\d 可以查看数据库的所有表
\c 连接到其他数据库
\q 退出psql
  1. 常用数据类型
    3.1 数值类型
名称别名描述取值范围
smallintint2有符号位2字节整数-32768 到 +32767
integerint, int4有符号位4字节整数-2147483648 到 +2147483647
bigintint8有符号位8字节整数-9223372036854775808 到 +9223372036854775807
smallserialserial2自增长2字节整数1 到 +32767
serialsearial4自增长4字节整数1 到 +2147483647
bigserialint2自增长八字节整数1 到 9223372036854775807
realfloat44字节单精度浮点数
double precisionfloat88字节双精度浮点数
numeric [(p, s)]decimal [(p, s)]自定义精度浮点数

注:smallserial, serial, bigserial并不是真正的数据类型,它们只是便于快速创建自增长列的符号(类似于MySQL的AUTO_INCREMENT)。

CREATE TABLE test_table (
    id SERIAL
);

与下面的SQL等价

CREATE SEQUENCE test_table_id_seq;
CREATE TABLE test_table (
    id integer NOT NULL DEFAULT nextval('test_table_id_seq')
);
ALTER SEQUENCE test_table_id_seq OWNED BY test_table.id;

3.2 字符类型

名称别名描述
character [(n)]char [(n)]定长字符串
character varying [(n)]varchar [(n)]变长字符串
text变长字符串

3.3 日期类型

名称别名描述
date日期,包含年月日
time [()] [without time zone]时间(不包含时区)(不包括日期)
time [()] with time zonetimetz时间,包含时区(不包括日期)
timestamp [()] [without time zone]日期及时间(不包含时区)
timestamp [()] with time zone日期及时间(包含时区)
interval [fields] [()]时间间隔

3.4 金钱类型

名称别名描述
money金额

3.5 布尔类型

名称别名描述
bool布尔可以用"t, T, true, TRUE, y, yes, on, f, F, false, FALSE, n, no, off, 1, 0…""表示

3.6 二进制字符串

名称别名描述
bytea变长的二进制字符串

3.7 网络地址

名称别名描述
cidrIPv4/IPv6网络地址
inetIPv4/IPv6主机和网络
macaddrmac地址,‘08:00:2b:02:03’,‘08-00-2b-01-02-03’…

注:IPv4形式均为adress/y, inet不写y默认为32, cidr不写y按照IP地址分类来添加默认掩码。

3.8 bit串类型

名称别名描述
bit [(n)]定长bit串
bit varying [(n)]varbit [(n)]变长bit串

3.9 文字搜索类型

tsvector有序的无重复的语义集合。
tsquery存储用来搜索的语义字段,会处理逻辑运算。

3.10 其他字段

名称别名描述
jsonjson 数据
uuiduuid
xmlxml
数组数组
  1. 系统保留列

PostgreSQL的每张表都有系统保留列,都是系统隐式定义的。用户自定义的字段名不能与它们冲突。

名称描述
oid
tableoid
xmin
cmin
xmax
cmax
ctid
  1. MySQL与PostgreSQL一些差异

    (1) 注释符号不同:MySQL使用#进行注释,PG使用- -。

    (2) 引用值的符号不同:MySQL使用单引号或者双引号引用值(如,WHERE name = “john”);PG只使用单引号引用值(WHERE name = ‘john’),双引号用来引用系统标识符,字段名,表名等等。

    (3) MySQL使用反引号来引用系统标识。

    (4) PG针对字符串比较是大小写敏感的,"Smith"和"smith"不一样。合理使用转换函数,如lower();大小写不敏感的操作符,如like。

    (5) PG中的数据库,表,字段和列名称与大小写无关,默认都会转化成小写的,除非使用双引号创建它们,在这种情况下会区分大小写;在MySQL中,表名称可以区分大小写,也可以不区分大小写,具体取决于使用的操作系统。

    (6) MySQL使用C语言运算符进行逻辑运算(即’foo’||‘bar’表示’foo’或’bar’,‘foo’&&‘bar’表示’foo’和’bar’);PG使用|| 用于字符串连接(‘foo’||‘bar’=‘foobar’)。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值