PostgreSQL基础知识分享
1、架构
PostgreSQL是一个关系数据库,采用c/s架构。一个PostgreSQL会话包括:
服务端进程——postgres:用于管理数据库文件,并接受来自客户端的数据库连接, 同时代替客户端执行数据库操作。
客户端
2、命令
(1)创建数据库
createdb -U postgres mydb
(2)连接数据库
psql -U postgres mydb
(3)元命令(内部命令)
\h 可以查看SQL命令语法上的说明,后面不加SQL命令,会列出所有SQL命令
\? 可以查看所有的元命令
\l 查看所有数据库
\d 可以查看数据库的所有表
\c 连接到其他数据库
\q 退出psql
3、常用数据类型
3.1 数值类型
| 名称 | 别名 | 描述 | 取值范围 |
| smallint | int2 | 有符号位2字节整数 | -32768 到 +32767 |
| integer | int, int4 | 有符号位4字节整数 | -2147483648 到 +2147483647 |
| bigint | int8 | 有符号位8字节整数 | -9223372036854775808 到 +9223372036854775807 |
| smallserial | serial2 | 自增长2字节整数 | 1 到 +32767 |
| serial | searial4 | 自增长4字节整数 | 1 到 +2147483647 |
| bigserial | int2 | 自增长八字节整数 | 1 到 9223372036854775807 |
| real | float4 | 4字节单精度浮点数 | |
| double precision | float8 | 8字节双精度浮点数 | |
| 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 zone | timetz | 时间,包含时区(不包括日期) |
| 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 网络地址
| 名称 | 别名 | 描述 |
| cidr | IPv4/IPv6网络地址 | |
| inet | IPv4/IPv6主机和网络 | |
| macaddr | mac地址,‘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 其他字段
| 名称 | 别名 | 描述 |
| json | json 数据 | |
| uuid | uuid | |
| xml | xml | |
| 数组 | 数组 |
4、系统保留列
PostgreSQL的每张表都有系统保留列,都是系统隐式定义的。用户自定义的字段名不能与它们冲突。
| 名称 | 描述 |
| oid | |
| tableoid | |
| xmin | |
| cmin | |
| xmax | |
| cmax | |
| ctid |
5、 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')。
都是相互学习得过程,希望大家能够共同交流,共同进步,谢谢。
PostgreSQL基础知识分享的更多相关文章
- GO基础知识分享
目录 GO基础知识分享 go语言的基本事项 关键字 字符串的拼接和变量的定义方式 空白符 const常量 iota的用法 运算符 Go 没有三目运算符,不能适用?: 语言条件语句 for循环的方式 函 ...
- PostgreSQL基础知识与基本操作索引页
磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 luckyjackgao@gmail.com 本页记录所有本人所写的PostgreSQL的基础知识和基本操作相关文摘和 ...
- XML的相关基础知识分享(二)
前面我们讲了一下XML相关的基础知识(一),下面我们在加深一下,看一下XML高级方面. 一.命名空间 1.命名冲突 XML命名空间提供避免元素冲突的方法. 命名冲突:在XML中,元素名称是由开发者定义 ...
- docker 基础知识分享ppt
给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx
- Elasticsearch基础知识分享
1. Elasticsearch背景介绍 Elasticsearch 是一个基于 Lucene 的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful web 接口.Elast ...
- XML的相关基础知识分享
XML和Json是两种最常用的在网络中数据传输的数据序列化格式,随着时代的变迁,XML序列化用于网络传输也逐渐被Json取代,前几天,单位系统集成开发对接接口时,发现大部分都用的WebService技 ...
- 工作随笔—Java容器基础知识分享(持有对象)
1. 概述 通常,程序总是运行时才知道的根据某些条件去创建新对象.在此之前,不会知道所需对象的数量,甚至不知道确切的类型,为解决这个普遍的编程问题:需要在任意时刻和任意位置创建任意数量的对象,所以,就 ...
- asch相关的linux基础知识分享
本文针对的人群:会用putty.SecureCRT.xhsell等工具ssh连接到自己的asch服务器上,但不怎么会执行命令的人.高手请绕路~ 本文主要围绕受托人搭建.维护涉及相关的内容进行Linux ...
- Unity3D基础知识梳理
这段时间在做Unity的项目,这差不多是我的第一次实战啊~然后公司来了实习的童鞋要学Unity,但是我一向不靠谱啊,所以只能帮他们稍微梳理下基础的东西了啊,唉~学长只能帮你们到这里了~顺便就把自己这两 ...
随机推荐
- git20181122
git 在线编辑器 http://www.mdeditor.com/git add commit diff log status 代码撤消 # git https://github.com/gyz41 ...
- 大数据ssh疑点跟踪
相信运维的对ssh免密登陆应该是对这个再清楚不过的吧,由于我们大数据对于安全这方便管控的很严格,单独找一台物理机作为跳板机,其他的机器都必须要从这个跳板机免密登陆,由于机器比较的多,其中dn30这个域 ...
- 百度广告联盟api probuf协议对接
百度的广告API使用的是不是通常的http协议,而是使用谷歌开源出来的probuf协议,具体介绍请参考:https://www.jianshu.com/p/b1f18240f0c7https://ww ...
- vue中使用postMessage进行跨越传值
想在“当前位置”获取子页面的title属性,但是main页面和子页面在不同的端口上,直接获取会出现: “Blocked a frame with origin from accessing a cro ...
- android studio 开发免安装的app之目录结构
尚未深入分析,暂且外链到我看到的,对此有帮助的博客,在此,感谢你们. 1.https://blog.csdn.net/tscyds/article/details/74331085 2.https:/ ...
- SpringBoot使用prometheus监控
本文介绍SpringBoot如何使用Prometheus配合Grafana监控. 1.关于Prometheus Prometheus是一个根据应用的metrics来进行监控的开源工具.相信很多工程都在 ...
- linux-centos基本使用(一)
1. 基本配置 1.常用软件安装 yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2uni ...
- RSP小组——团队冲刺博客一——(领航)
RSP小组--团队冲刺博客一--领航 冲刺日期:2018年12月10日 团队目标 经过团队讨论,我们最新确定的α版本所需实现内容如下: 1.实现游戏代码的实现 2.在Android Studio上实现 ...
- Python使用ProtoBuffer
Python使用ProtoBuffer Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 就可读性而言感 ...
- ubuntu 14.04 安装 rabbitmq
1. sudo apt-get update 安装rabbitmq 2. sudo apt-get install rabbitmq-server 添加用户 3. sudo rabbitmqctl a ...