资讯专栏INFORMATION COLUMN

PostgreSQL的实践一:初识

yibinnn / 3348人阅读

摘要:每个服务由多个进程组成,为首的进程名为。服务使用字节长的内部事务标识符,即时发生重叠后仍然继续使用,这会导致问题,所以需要定期进行操作。操作被认为是紧跟操作后的操作。在涉及高比例插入删除的表中,会造成索引膨胀,这时候可以重建索引。

简介和认知 发音

post-gres-q-l

服务(server)

一个操作系统中可以启动多个postgres服务。
每个服务由多个进程组成,为首的进程名为postmaster。
每个服务要占用一个端口,多个服务不能共享端口。
每个服务都有一个data目录用于存放数据,目录不允许修改,否则会破坏数据库,并且无法修复。
服务使用4字节长的内部事务标识符,即时发生重叠后仍然继续使用,这会导致问题,所以需要定期进行VACUUM操作。

数据库(database)

一个服务中可以拥有多个数据库。
数据库默认是任何用户可连接的,创建好后需要修改相应的权限。
数据库之间的数据是隔离的,不能进行联表。
数据库默认的数据块大小为8192。

模式(schema)

一个数据库中可以有多个模式,模式相当于表的命名空间,类似于mysql中的database,可以使用带模式的完整名称来访问或者创建对象。
不同模式之间的表是可以联表查询的。
可以通过对用户设置search_path参数来指定默认搜索的模式。

表(table)

一个模式中可以有多张表。
表是由多个关系元素组成的,大字段数据放在另一个名为TOAST的表中,每张表都有一个TOAST表和TOAST索引。
用双引号括起来的表和没用双引号括起来的表是不一样的,即使名字一样。
双引号括起来的表区分大小写,没用双引号括起来的表不区分大小写。

列(column)

每张表都由许多列组成,每一列有一个列名、类型、默认值等属性,用来存储每一条记录中的各种值。
文本类型统一由一种数据类型存储,支持长度从1B到1G,经过优化,存储少的时候很高效,存储多的时候会自动管理和压缩。
自增类型serial本质上就是整数,通过创建并关联到一个SEQUENCE类型的对象来记录自增值。

表空间(tablespace)

默认情况下,所有的数据都会放在postgres指定的data目录下,通过定义表空间,可以让postgres将数据存放在不同的设备上。
表空间是通过软链接来实现的。
建议为每个数据库设立一个多带带的表空间,尤其是不同数据库中有同名的模式或者表的时候。
postgres=# CREATE TABLESPACE tbs LOCATION "/usr/local/tbs";

视图(view)

视图本质上是预定义好的一个sql查询,以一张表的形式给出,在每次调用时都会执行相应的sql查询。
postgres=# CREATE VIEW view AS SELECT * FROM tb;

当视图足够简单的时候,postgres是支持视图更新的,相应的更新会传递到相应的表中。
还可以使用INSTEAD OF触发器或者规则来实现视图更新,请参考具体的操作手册。
物化视图可以预先将数据查询出来,这样调用的时候就不必反复查询了,更新需要手动更新。
postgres=# CREATE MATERIALIZED VIEW view AS SELECT * FROM tb;
postgres=# REFRESH MATERIALIZED VIEW view;

行(row)

行即表中的一条数据。
postgres中每个行都有一个行版本,而且还有两个系统列xmin和xmax,分别标示这个行被创建和删除的事务。
删除时,设置xmax为删除事务号,不会实际执行删除。
UPDATE操作被认为是紧跟INSERT操作后的DELETE操作。
索引(index)
索引可以用来给表添加约束或者提高查询速度。
在涉及高比例插入删除的表中,会造成索引膨胀,这时候可以重建索引。

reindexdb

创建CONCURRENTLY索引时不会持有全表锁,这条指令分成两个步骤,第一部分创建索引并标记为不可用,这时候INSERT、UPDATE、DELETE操作已经开始维护索引了,但是查询不能使用索引。建立完毕后才会被标记为可用。
postgres=# CREATE CONCURRENTLY INDEX index ON tb(id);

可以手工设置索引的可用性。

UPDATE pg_index SET indisvalid = false WHERE indexrelid = index::regclass;
pgsql 中表空间/数据库/模式 的关系

表空间是物理结构,同一表空间下可以有多个数据库
数据库是逻辑结构,是表/索引/视图/存储过程的集合,一个数据库下可以有多个schema
模式是逻辑结构,是对数据库的逻辑划分

安装
# vist https://www.postgresql.org/download/
# Interactive installer by EnterpriseDB -> 选择10.5版本的Windows x86-64下载
1. 一路的next安装,当然你可以自己选择安装的目录
2. 提示输入postgres帐号的密码,你可以根据自己的喜好,设置一个,比如这里我设置了:123456
2. 提示安装插件扩展,取消即可,暂时不需要安装
psql客户端简单实用 连接
# $MY_POSTGRES_PATH = D:PostgreSQL; 这个环境参数代表我安装的Postgresql服务器所在的目录
# $MY_POSTGRES_PATH/bin/psql -U postgres
$MY_POSTGRES_PATH/bin/scripts/runpsql
# 依次默认回车,如果有需要调整参数,你可以自定义
# 输入123456


#output
Server [localhost]:
Database [postgres]:
Port [5432]:
Username [postgres]:
用户 postgres 的口令:
psql (10.5)
输入 "help" 来获取帮助信息.
postgres=#

# 输入help得到以下提示
postgres=# help
您正在使用psql, 这是一种用于访问PostgreSQL的命令行界面
键入: copyright 显示发行条款
       h 显示 SQL 命令的说明
       ? 显示 pgsql 命令的说明
       g 或者以分号(;)结尾以执行查询
       q 退出
postgres=#

# l 查看已存在的数据库
postgres-# l
                                                                             数据库列表
   名称    |  拥有者  | 字元编码 |                      校对规则                       |                        Ctype                        |       存取权限
-----------+----------+----------+-----------------------------------------------------+-----------------------------------------------------+-----------------------
 postgres  | postgres | UTF8     | Chinese (Simplified)_People"s Republic of China.936 | Chinese (Simplified)_People"s Republic of China.936 |
 template0 | postgres | UTF8     | Chinese (Simplified)_People"s Republic of China.936 | Chinese (Simplified)_People"s Republic of China.936 | =c/postgres          +
           |          |          |                                                     |                                                     | postgres=CTc/postgres
 template1 | postgres | UTF8     | Chinese (Simplified)_People"s Republic of China.936 | Chinese (Simplified)_People"s Republic of China.936 | =c/postgres          +
           |          |          |                                                     |                                                     | postgres=CTc/postgres
(3 行记录)

# 我们可以发现默认存在postgres、template0和template1数据库,template`X`是模板数据库
# template1为可修改模版库,template0为不可修改模版库
创建数据库
postgres=# create database testdb;
# CREATE DATABASE

# c = connect
postgres=# c testdb;
# 您现在已经连接到数据库 "testdb",用户 "postgres".
创建表
# 查看表
testdb=# d
# Did not find any relations.

# 创建表
testdb=# create table test1(id int primary key, name varchar(50));
# CREATE TABLE

testdb=# d
               关联列表
 架构模式 | 名称  |  类型  |  拥有者
----------+-------+--------+----------
 public   | test1 | 数据表 | postgres
(1 行记录)
# 架构模式(schema)我们后续会讲,暂时你可以先理解为一个数据库逻辑分类的概念,默认创建数据库都会有一个public的schema
常规显示设置
# 设置显示查询时间
	iming on
# 设置border的边框内外都有
pset border 2
# 查看编码
encoding
# 设置编码
encoding UTF8
# 开启扩展显示,纵向打印每列数据
x
# 例子:
testdb=# select * from test1;
+-[ RECORD 1 ]-+
| id   | 1   |
| name | qkl |
+------+-----+

# 设置命令执行的真正sql:on打开 off关闭
set ECHO_HIDDEN on
set ECHO_HIDDEN off
# 案例:
testdb=# set ECHO_HIDDEN on
testdb=# d
********* 查询 **********
SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN "r" THEN "table" WHEN "v" THEN "view" WHEN "m" THEN "materialized view" WHEN "i" THEN "index" WHEN "S" THEN "sequence" WHEN "s" THEN "special" WHEN "f" T
HEN "foreign table" WHEN "p" THEN "table" END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind IN ("r","p","v","m","S","f","")
      AND n.nspname <> "pg_catalog"
      AND n.nspname <> "information_schema"
      AND n.nspname !~ "^pg_toast"
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;
**************************

关联列表
+-[ RECORD 1 ]--------+
| 架构模式 | public   |
| 名称     | test1    |
| 类型     | 数据表   |
| 拥有者   | postgres |
+----------+----------+
常用命令
testdb-# ?
一般性
  copyright            显示PostgreSQL的使用和发行许可条款
  crosstabview [COLUMNS] 执行查询并且以交叉表显示结果
  errverbose            以最冗长的形式显示最近的错误消息
  g [文件] or;     执行查询 (并把结果写入文件或 |管道)
  gexec                 执行策略,然后执行其结果中的每个值
  gset [PREFIX]     执行查询并把结果存到psql变量中
  gx [FILE]             as g, but forces expanded output mode
  q             退出 psql
  watch [SEC]          每隔SEC秒执行一次查询

帮助
  ? [commands]          显示反斜线命令的帮助
  ? options             显示 psql 命令行选项的帮助
  ? variables           显示特殊变量的帮助
  h [名称]          SQL命令语法上的说明,用*显示全部命令的语法说明

查询缓存区
  e [FILE] [LINE]        使用外部编辑器编辑查询缓存区(或文件)
  ef [FUNCNAME [LINE]]   使用外部编辑器编辑函数定义
  ev [VIEWNAME [LINE]]  用外部编辑器编辑视图定义
  p                    显示查询缓存区的内容
  
                    重置(清除)查询缓存区
  w 文件          将查询缓存区的内容写入文件

输入/输出
  copy ...             执行 SQL COPY,将数据流发送到客户端主机
  echo [字符串]       将字符串写到标准输出
  i 文件          从文件中执行命令
  ir FILE               与 i类似, 但是相对于当前脚本的位置
  o [文件]        将全部查询结果写入文件或 |管道
  qecho [字符串]      将字符串写到查询输出串流(参考 o)

Conditional
  if EXPR               begin conditional block
  elif EXPR             alternative within current conditional block
  else                  final alternative within current conditional block
  endif                 end conditional block

资讯性
  (选项: S = 显示系统对象, + = 其余的详细信息)
  d[S+]          列出表,视图和序列
  d[S+]  名称      描述表,视图,序列,或索引
  da[S]  [模式]    列出聚合函数
  dA[+]  [PATTERN]      list access methods
  db[+]  [模式]     列出表空间
  dc[S+] [PATTERN]      列表转换
  dC[+]  [PATTERN]      列出类型强制转换
  dd[S]  [PATTERN]      显示没有在别处显示的对象描述
  dD[S+] [PATTERN]      列出共同值域
  ddp     [模式]    列出默认权限
  dE[S+] [PATTERN]      列出引用表
  det[+] [PATTERN]      列出引用表
  des[+] [模式]    列出外部服务器
  deu[+] [模式]     列出用户映射
 dew[+] [模式]       列出外部数据封装器
   df[antw][S+] [模式]    列出[只包括 聚合/常规/触发器/窗口]函数
  dF[+]  [模式]   列出文本搜索配置
  dFd[+] [模式]     列出文本搜索字典
 dFp[+] [模式]     列出文本搜索解析器
  dFt[+] [模式]   列出文本搜索模版
  dg[S+] [PATTERN]      列出角色
 di[S+] [模式]  列出索引
  dl                   列出大对象, 功能与lo_list相同
  dL[S+] [PATTERN]      列出所有过程语言
  dm[S+] [PATTERN]      列出所有物化视图
  dn[S+] [PATTERN]     列出所有模式
  do[S]  [模式]   列出运算符
  dO[S+] [PATTERN]      列出所有校对规则
  dp     [模式]     列出表,视图和序列的访问权限
  drds [模式1 [模式2]] 列出每个数据库的角色设置
  dRp[+] [PATTERN]      list replication publications
  dRs[+] [PATTERN]      list replication subscriptions
  ds[S+] [模式]    列出序列
  dt[S+] [模式]     列出表
  dT[S+] [模式]  列出数据类型
  du[S+] [PATTERN]      列出角色
  dv[S+] [模式]   列出视图
  dx[+]  [PATTERN]      列出扩展
  dy     [PATTERN]      列出所有事件触发器
  l[+]   [PATTERN]      列出所有数据库
  sf[+]  FUNCNAME       显示一个函数的定义
  sv[+]  VIEWNAME       显示一个视图的定义
  z      [模式]    和dp的功能相同

格式化
  a                  在非对齐模式和对齐模式之间切换
  C [字符串]        设置表的标题,或如果没有的标题就取消
  f [字符串]         显示或设定非对齐模式查询输出的字段分隔符
  H                    切换HTML输出模式 (目前是 关闭)
  pset [NAME [VALUE]]   set table output option
                         (NAME := {border|columns|expanded|fieldsep|fieldsep_zero|
                         footer|format|linestyle|null|numericlocale|pager|
                         pager_min_lines|recordsep|recordsep_zero|tableattr|title|
                         tuples_only|unicode_border_linestyle|
                         unicode_column_linestyle|unicode_header_linestyle})
  	 [开|关]       只显示记录 (目前是 关闭)
  T [字符串]         设置HTML <表格>标签属性, 或者如果没有的话取消设置
  x [on|off|auto]       切换扩展输出模式(目前是 关闭)

连接
  c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo}
                         连接到新数据库(当前是"testdb")
  conninfo              显示当前连接的相关信息
  encoding [编码名称] 显示或设定客户端编码
  password [USERNAME]  安全地为用户更改口令

操作系统
  cd [目录]     更改目前的工作目录
  setenv NAME [VALUE]   设置或清空环境变量
 	iming [开|关]       切换命令计时开关 (目前是 开启)
  ! [命令]      在 shell中执行命令或启动一个交互式shell

变量
  prompt [文本] 名称 提示用户设定内部变量
  set [名称 [值数]] 设定内部变量,若无参数则列出全部变量
  unset 名称    清空(删除)内部变量

大对象
  lo_export LOBOID 文件
  lo_import 文件 [注释]
  lo_list
  lo_unlink LOBOID   大对象运算

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/39021.html

相关文章

  • 新书推荐 |《PostgreSQL实战》出版(提供样章下载)

    摘要:作者谭峰张文升出版日期年月页数页定价元本书特色中国开源软件推进联盟分会特聘专家撰写,国内多位开源数据库专家鼎力推荐。张文升中国开源软件推进联盟分会核心成员之一。 很高兴《PostgreSQL实战》一书终于出版,本书大体上系统总结了笔者 PostgreSQL DBA 职业生涯的经验总结,本书的另一位作者张文升拥有丰富的PostgreSQL运维经验,目前就职于探探科技任首席PostgreS...

    Martin91 评论0 收藏0
  • PHPUnit实践初识

    摘要:另外一些单元测试可能会测试负向路径的场景,保证代码不仅会产生错误,而且是预期的错误。是一个面向程序员的测试框架,这是一个的体系结构的单元测试框架。 本系列教程所有的PHPUnit测试基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我们的普通用到的测试: 代码直接echo,debug等方法测试 -> 跟踪细节断点型测试 log日志辅助测试 -> 跟踪细节断点型测试 ...

    weapon 评论0 收藏0
  • PHPUnit实践初识

    摘要:另外一些单元测试可能会测试负向路径的场景,保证代码不仅会产生错误,而且是预期的错误。是一个面向程序员的测试框架,这是一个的体系结构的单元测试框架。 本系列教程所有的PHPUnit测试基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我们的普通用到的测试: 代码直接echo,debug等方法测试 -> 跟踪细节断点型测试 log日志辅助测试 -> 跟踪细节断点型测试 ...

    hss01248 评论0 收藏0
  • Python--Redis实战:第章:初识Redis:第节:Redis简介

    摘要:上一篇文章实战安装下一篇文章实战第一章初识第二节数据结构简介是一个远程内存数据库,它不仅性能强劲,而且还具有复制特性以及为解决问题而生的独一无二的数据模型,是一个速度非常快的非关系数据库。 上一篇文章:Pyhton--Redis实战:Mac brew安装redis下一篇文章:Python--Redis实战:第一章:初识Redis:第二节:Redis数据结构简介 Redis是一个远程内...

    enali 评论0 收藏0

发表评论

0条评论

yibinnn

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<