postgresql学习笔记--基础篇
1. 客户端程序和服务器端程序
1.1 客户端程序
Command | Example | Describe |
clusterdb | clusterdb -h pghost1 -p 1921 -d mydb |
ClusterDB是SQL Cluster的封装,Postgersql是堆表存储的, clusterdb通过索引对数据库中基于堆表的物理文件重新排序, 它在一定场景下可以节省磁盘访问,加速查询速度。 |
reindexdb |
reindexdb -e -h pghost1 -p 1921 -d mydb |
reindexdb是SQL REINDX命令的一个封装。 在索引物理文件发生损坏或者索引膨胀等情况发生时,可以使用reindexdb命令对指定的表或者数据库重建索引并删除旧的索引。 |
vacuumdb |
vacuumdb -h pghost1 -p 1921 mydb |
vacuumdb是POSTGRES数据库独有的VACUUM/VACUUM FREEZE和VACUUM FULL,VACUUM ANALYZE这几个SQL命令的封装。 VACUUM系列命令的主要职责是对物理文件等的垃圾回收。 |
vacuumlo | vacuumlo -h pghost1 -p 1921 mydb | vacuumlo用来清理数据库中未引用的大对象。 |
createdb dropdb |
createdb -h pghost1 -p 1921 newdb “New Database.” dropdb -h pghost1 -p 1921 newdb |
create db drop db |
createuser dropuser |
创建普通用户,只有一个连接,没有创库/创用户的权限,并设置密码 >createuser -h pghost1 -p 1921 -c 1 -g pg_monitor -D -R-S-P -e newuser >Enter password for new role: >Enter it again: >CREATE ROLE newuser PASSWORD 'md518b2c3ec6f3dxxxxxx' NOSUPERUSER NOCREATEDB NOCREATEDROLE INHERIT LOGIN CONNECTION LIMIT 1 IN ROLE pg_monitor; 通过interactive参数交互创建用户 >createuser -h pghost1 -p 1921 -c 1 -g pg_monitor --interactive -e -P newuser >Enter password for new role: >Enter it again: >Shall the new role be a superuser ? (y/n) n >Shall the new role be allowed to create databases? (y/n) n >Shall the new role be allowed to create more new roles ? (y/n)n >CREATE ROLE newuser PASSWORD 'md518b2c3ec6f3dxxxxxx' NOSUPERUSER NOCREATEDB NOCREATEDROLE INHERIT LOGIN CONNECTION LIMIT 1 IN ROLE pg_monitor; 删除用户 dropuser -h pghost1 -p 1921 newuser |
createuser dropuser |
pg_basebackup |
取得一个正在运行中的Postgres实例的基础备份 |
|
pg_dump pg_dumpall |
以数据库转储方式进行备份 |
|
pg_restore |
用来从pg_dump创建的非文本格式的备份中恢复数据 |
其他客户端程序:
ecpg是用于C程序的Postgres嵌入式SQL预处理器。它将SQL调用替换为特殊函数调用,把带有嵌入式SQL语句的C程序转化为普通C代码。
- oid2name:解析一个Postgresql数据目录中的OID和文件节点。
- pgbench:是运行基准测试的工具,平常可以模拟简单的压力测试
- pg_config:获取当前安装的Postgres的配置参数
- pg_receivexlog:可以从一个运行中的实例获取事务日志的流。
- pg_recvlogical:控制逻辑解码复制槽以及来自这种复制槽的流数据。
1.2 服务器程序
- initdb:用来创建行的数据库目录
- pg_archivecleanup:清理Postgresql WAL归档文件的工具
- pg_controldata:显示数据库服务的控制信息,例如目录版本/预写日志和检查点的信息。
- pg_ctl:初始化/启动/停止/控制数据库服务器的工具。
- pg_resetwal:可以清除预写日志并且有选择地重置存储在pg_control文件中的一些控制信息。 当服务器由于控制文件损坏,pg_resetwal可以作为最后的手段。
- pg_rewind:是在master/slave角色发生切换时,将原master通过同步模式恢复,避免重做基础备份的工具。
- pg_test_fsync:可以通过一个快速的测试,了解系统使用哪一种预写日志的同步方法(wal_sync_method)最快,还可以在发生I/O问题时提供诊断信息。
- pg_test_timing:是一种度量系统统计时开销以及确认系统时间绝不会回退的工具。
- pg_upgrade:是postgres的升级工具。
- pg_waldump:用来将预写日志解析为可读格式。
1.3 初始化数据库目录
创建目录: mkdir -p /pgdata/10/{data,backups,scripts,archive_wals}
postgres@nancloud-onprem-06:/usr/lib/postgresql/9.5/bin$ ./initdb --help
initdb initializes a PostgreSQL database cluster. Usage:
initdb [OPTION]... [DATADIR] Options:
-A, --auth=METHOD default authentication method for local connections //为本地用户指定pg_hba.conf文件中的认证方法,可以为md5/trust/password等,默认是trust,代表信任服务器上所有用户 --auth-host=METHOD default authentication method for local TCP/IP connections //指定通过TCP/IP连接的本地用户在pg_hba.conf中使用的认证方法
--auth-local=METHOD default authentication method for local-socket connections //指定通过UNIX Socket连接的本地用户在pg_hba.conf文件中的认证方法
[-D, --pgdata=]DATADIR location for this database cluster //将要初始化的数据目录;必须选项
-E, --encoding=ENCODING set default encoding for new databases //设置数据库默认编码,实际它是设置了template1的编码,因为其他新创建的数据库都是以template1为模板克隆的。
--locale=LOCALE set default locale for new databases //设置区域
--lc-collate=, --lc-ctype=, --lc-messages=LOCALE
--lc-monetary=, --lc-numeric=, --lc-time=LOCALE
set default locale in the respective category for
new databases (default taken from environment)
--no-locale equivalent to --locale=C
--pwfile=FILE read password for the new superuser from file //从一个文件读取第一行作为数据库超级用户口令
-T, --text-search-config=CFG //设置默认的文本搜索配置
default text search configuration
-U, --username=NAME database superuser name //设置数据库超级用户的用户名,默认是postgres
-W, --pwprompt prompt for a password for the new superuser //在initdb的过程中为数据库超级用户设置一个密码。
-X, --xlogdir=XLOGDIR location for the transaction log directory //指定预写日志(WAL)的存储目录
Less commonly used options:
-d, --debug generate lots of debugging output
-k, --data-checksums use data page checksums
-L DIRECTORY where to find the input files
-n, --noclean do not clean up after errors
-N, --nosync do not wait for changes to be written safely to disk
-s, --show show internal settings
-S, --sync-only only sync data directory Other options:
-V, --version output version information, then exit
-?, --help show this help, then exit
Example:
-bash-4.1$ initdb -D ~/test -W
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process. The database cluster will be initialized with locale en_US.UTF-.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english". fixing permissions on existing directory /var/lib/pgsql/test ... ok
creating subdirectories ... ok
selecting default max_connections ...
selecting default shared_buffers ... 32MB
creating configuration files ... ok
creating template1 database in /var/lib/pgsql/test/base/ ... ok
initializing pg_authid ... ok
Enter new superuser password:
Enter it again:
setting password ... ok
initializing dependencies ... ok
creating system views ... ok
loading system objects' descriptions ... ok
creating conversions ... ok
creating dictionaries ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb. Success. You can now start the database server using: postgres -D /var/lib/pgsql/test
or
pg_ctl -D /var/lib/pgsql/test -l logfile start
通过上面样例,可以看出,在initdb的输出中可以看到系统自动创建了template1数据库和postgres数据库,template1是生产其他数据库的模板,postgres是一个默认数据库,需要注意的是,不要在将要初始化的数据库目录中手动创建任何文件,如果数据库目录中已经有文件,会有如下错误,防止误覆盖已有数据库:
-bash-4.1$ initdb -D ~/test -W
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process. The database cluster will be initialized with locale en_US.UTF-.
The default database encoding has accordingly been set to UTF8.
The default text search configuration will be set to "english". initdb: directory "/var/lib/pgsql/test" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/var/lib/pgsql/test" or run initdb
with an argument other than "/var/lib/pgsql/test".
除了使用initdb来初始化数据库目录,还可以通过pg_ctl工具进行数据库目录初始化:
pg_ctl init -D /pgdata//data -o "-W"
1.3 使用pg_ctl进行管理
- 启动数据库
- pg_ctl -D /pgdata/10/data start
- 查看数据库运行状态
- pg_ctl -D /pgdata/10/data status
- 还可以使用pg_isready工具来检测数据库服务器是否已经允许接收连接: pg_isready -p 1921
- 停止数据库
- pg_ctl stop [-D DATADIR] [-m SHUTDOWN-MODE] [-W] [-t SECS] [-s]
- “-s”参数开启和关闭屏幕上的消息输出:“-t SECS”参数设置超时时间,超过SECS值设置的超时时间自动退出。其中“-m” 参数控制数据库用什么模式停止。Postgres支持3中模式:smart,fast,immediate,默认是fast模式。
- smar 模式:会等待活动的事务提交结束,并等待客户端主动断开连接后关闭数据库
- fast模式:会回滚所有活动的事务,并强制断开客户端的连接之后关闭数据库。
- immediate模式:立即终止所有服务器进程,当下一次数据库启动时会首先进入恢复状态,一般不推荐使用。
- 在写命令的时候可以使用简写 “-ms” ,“-mf” ,“-mi”
2. 数据库基础配置
2.1 pg_hba.conf
pg_hba.conf 是数据库实例的防火墙,文件格式如下:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
- 连接方式: TYPE列标识允许的连接方式,可用的值有:local,host,hostssl,hostnossl
- local:匹配使用Unix域套接字的连接。如果没有TYPE为local的条目则不允许通过Unix域Socket连接
- host:匹配使用TCP/IP建立的连接,通过匹配SSL和非SSL连接。默认只监听本地localhost地址,修改后需要同步修改postgresql.conf中listen_address参数。
- hostssl:匹配必须使用SSL的TCP/IP连接。配置hostssl有3个前提条件:
- 客户端和服务器端都安装openssl
- 编译Postgresql的时候指定configure参数--with-openssl打开SSL支持
- 在postgrsql.conf中配置ssl=on
- hostnossl:只匹配非ssl的TCP/IP连接
- 目标数据库:DATABASE列标识该行设置对哪个数据库生效
- 目标用户:USER标识该行设置对哪个数据库用户生效
- 访问来源:ADDRESS列标识该行设置对哪个IP地址或IP段生效
- 认证方法
- Method列表是客户端的认证方法,常见的认证方法有trust,reject,md5 and password
- reject认证方法主要应用在这样的场景:允许某一网段的大多数主机访问数据库,但拒绝少数机器
- md5和password认证方式的区别在于md5认证方式为双重md5加密,password指明文密码,所以不要在非信任网络使用password认证方式
- scram-sha-256是PG10中新增的基于SASL的认证方式,是PG目前提供的最安全的认证方式。不支持旧版本客户端
2.2 postgres.conf
postgres.conf配置文件的文件结构很简单,有多个configparameter=value形式组成,#开头的为注释。value支持的数据类型有Bool,int,float,string,enum。value还支持各种单位,如MB,GB和ms,min、d等。还支持include和include_if_exists指令,并且允许嵌套。
2.2.1 全局配置的修改方法
- 修改postgres.conf配置文件
- 通过ALTER SYSTEM命令修改全局配置,如:
mydb# ALTER SYSTEM SET listen_address='*';
通过ALTER SYSTEM SQL命令修改的全局配置参数,会自动编辑postgresql.auto.conf文件,在数据库启动时会加载postgresql.auto.conf文件,并用它的配置覆盖postgresql.conf中已有的配置。这个文件不要手工修改它。
- 启动数据库时进行设置:postgres -D /pgdata/10/data -c port=1922
2.2.2 非全局配置的修改方法
- 设置和重置Database级别的配置,如:
ALTER DATABASE name SET configparameter {TO|=}{value|DEFAULT}
ALTER DATABASE name RESET configuration ; - 设置和重置Session级别的配置
- 通过SET命令设置当前Session的配置。例如:
SET configparameter {TO|=} {value|'value'|DEFAULT}
SET configparameter TO DEFAULT; - 更新pg_setttings视图,例如
UPDATE 'pg_settings' SET setting=new_value where name='configparameter';
UPDATE 'pg_settings' set setting=reset_val where name='configparameter'; - 使用set_config函数更新会话配置
select set_conf('configparameter',new_value,false);
- 设置和重置Role级别的配置
ALTER ROLE name in DATABASE database_name SET configparameter {TO|=} {value|DEFAULT}
ALTER ROLE name in DATABASE database_name RESET configparameter;
2.2.3 如何查看配置
- 查询pg_settings系统表,例如
SELECT name,setting FROM pg_settings where name ~ 'xxx';
SELECT current_setting(name); - 通过show(show all)命令查看
2.2.4 使配置生效的方法
如果是不需要重启的参数,reload一次就可以生效。命令如下:
SELECT pg_reload_conf();
也可以使用pg_ctl命令reload配置:
pg_ctl -D /pgdata//data reload
postgresql学习笔记--基础篇的更多相关文章
- postgresql学习笔记--基础篇 - copy
1. psql 导入/导出数据 psql支持文件数据导入到数据库,也支持数据库表数据导出到文件中. COPY命令和\copy 命令都支持这两类操作,但两者有如下区别: COPY 命令是SQL命令,\c ...
- postgresql学习笔记--基础篇 -psql工具
--创建用户 CREATE ROLE pguser WITH ENCRYPTED PASSWORD 'pguser'; --创建表空间目录 mkdir -p /database/pg10/pg_tbs ...
- Python学习笔记基础篇——总览
Python初识与简介[开篇] Python学习笔记——基础篇[第一周]——变量与赋值.用户交互.条件判断.循环控制.数据类型.文本操作 Python学习笔记——基础篇[第二周]——解释器.字符串.列 ...
- Python学习笔记——基础篇【第一周】——变量与赋值、用户交互、条件判断、循环控制、数据类型、文本操作
目录 Python第一周笔记 1.学习Python目的 2.Python简史介绍 3.Python3特性 4.Hello World程序 5.变量与赋值 6.用户交互 7.条件判断与缩进 8.循环控制 ...
- java学习笔记-基础篇
Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...
- Java学习笔记——基础篇
Tips1:eclipse中会经常用到System.out.println方法,可以先输入syso,然后eclipse就会自动联想出这个语句了!! 学习笔记: *包.权限控制 1.包(package) ...
- iOS开发学习笔记:基础篇
iOS开发需要一台Mac电脑.Xcode以及iOS SDK.因为苹果设备都具有自己封闭的环境,所以iOS程序的开发必须在Mac设备上完成(当然,黑苹果应该也是可以的,但就需要花很多的精力去折腾基础环境 ...
- Python学习笔记——基础篇【第四周】——迭代器&生成器、装饰器、递归、算法、正则表达式
目录 1.迭代器&生成器 2.装饰器 a.基本装饰器 b.多参数装饰器 3.递归 4.算法基础:二分查找.二维数组转换 5.正则表达式 6.常用模块学习 #作业:计算器开发 a.实现加减成熟及 ...
- Python学习笔记——基础篇【第六周】——面向对象
Python之路,Day6 - 面向对象学习 本节内容: 面向对象编程介绍 为什么要用面向对象进行开发? 面向对象的特性:封装.继承.多态 类.方法. 同时可参考链接: http:// ...
随机推荐
- JVM(三) 对象的创建过程
1.对象的创建过程 1.1 . 给对象分配内存 对象的内存分配有两种方式,一种是指针碰撞另外一种是空闲列表的方式,堆是否规整由我们垃圾回收器来决定的 ,如果垃圾回收带有我们的压缩算法,那么他会规整的分 ...
- 6、rabbitmq&java代码操作
记住四个注解 存: rabbitTemplate.convertAndSend("bw","我要红包"); 取: @Component @RabbitListe ...
- 使用Docker-Compose编排发布.Net Core+Redis应用两个镜像到Docker
对于刚刚完成的Alipay支的Demo, 我想要把它部署到Docker中去, 下面我来演示相关步骤. 创建配置文件 配置文件的重中之重是Dockerfile, 他的内容如下: # 第一部分是编译并发布 ...
- Ubuntu下U盘文件只读的解决办法
转自linux公社:http://www.linuxidc.com/Linux/2012-12/76130.htm Ubuntu下U盘出现文件系统只读的问题了.症状为无法删除U盘中现有文件,无法向U盘 ...
- git出现Invalid path
今天换了电脑,我直接把整个仓库从电脑A复制到了电脑B,包括仓库下面的 .git 文件夹. 修改代码后我执行了一下 git add . 出现了一个报错 fatal: Invalid path 'D:/S ...
- DataSource配置
一.JDBC Jar依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifac ...
- mybatis执行DDL语句
对MyBatis一直停留在仅仅会用的阶段,常用的场景就是通过MyBatis对表数据进行DML(insert, delete, update等)操作,从来没有想过通过MyBatis对数据库进行DDL(c ...
- SpringCloud使用Consul作为分布式配置中心
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_36027670/article/de ...
- markdown语法之列表与缩进
在markdown语法中, 用*或+或-在行首表示无序列表.在这些符号之后应该空一格然后输入内容. 例如 + 无序列表 * 无序列表 - 无序列表 会被markdown语法渲染为 无序列表 列表嵌套 ...
- Spring Cloud Alibaba学习笔记(6) - Sentinel使用总结
使用Sentinel API Sentinel主要有三个核心Api: SphU:定义资源,让资源收到监控,保护资源 SphU 包含了 try-catch 风格的 API.用这种方式,当资源发生了限流之 ...