[TOC]
# <span style="font-size:15px">**数据库配置设置函数**</span>
| 名称 | 描述 |
| --- | --- | --- |
|current\_setting(setting_name,missing_ok) | 获得配置的值 |
|set_config(setting_name,new_value,is_local) | 设置一个参数并返回新值 |
```
// 当参数没有missing_ok或者mission_ok不为true时,如果setting_name不存在,则会报错;存在时,将返回该配置值
postgres=# SELECT current_setting('datestyle11');
ERROR: unrecognized configuration parameter "datestyle11"
postgres=# SELECT current_setting('datestyle11',true);
current_setting
-----------------
(1 row)
postgres=# SELECT current_setting('datestyle',true);
current_setting
-----------------
ISO, YMD
(1 row)
```
# <span style="font-size:15px">**数据库对象尺寸函数**</span>
| 名称 | 返回类型 | 描述 |
| --- | --- | --- |
| pg_column_size(any) | int | 存储一个特定值(可能压缩过)所需的字节数 |
| pg_database_size(oid) | bigint | 指定 OID 的数据库使用的磁盘空间 |
| pg_database_size(name) | bigint | 指定名称的数据库使用的磁盘空间 |
| pg_indexes_size(regclass) | bigint | 附加到指定表的索引所占的总磁盘空间 |
| pg_relation_size(relation regclass,fork text) | bigint | 指定表或索引的指定分叉(main、fsm、vm或init)使用的磁盘空间 |
| pg_relation_size(relation regclass) | bigint | pg_relation_size(..., 'main')的简写 |
| pg_size_bytes(text) | bigint | 把人类可读格式的带有单位的尺寸转换成字节数 |
| pg_size_pretty(bigint) | text | 将表示成一个 64位整数的字节尺寸转换为带尺寸单位的人类可读格式 |
| pg_size_pretty(numeric) | text | 将表示成一个数字值的字节尺寸转换为带尺寸单位的人类可读格式 |
| pg_table_size(regclass) | bigint | 被指定表使用的磁盘空间,排除索引(但包括 TOAST、空闲空间映射和可见性映射) |
| pg_tablespace_size(oid) | bigint | 指定 OID 的表空间使用的磁盘空间 |
| pg_tablespace_size(name) | bigint | 指定名称的表空间使用的磁盘空间 |
| pg_total_relation_size(regclass) | bigint | 指定表所用的总磁盘空间,包括所有的索引和TOAST数据。这个函数等价于`pg_table_size`+`pg_indexes_size` |
以下例子可见,`pg_indexes_size(regclass)`函数效果与各个索引使用`pg_relation_size(indexname)`函数的总和是一样的。
```
// 查看指定表的索引
postgres=# select * from pg_indexes where tablename='alerts';
schemaname | tablename | indexname | tablespace | indexdef
------------+-----------+-------------------------------------+------------+--------------------------------------------------------------------------------------------------
public | alerts | index_attack_alarm_attack_result | | CREATE INDEX index_attack_alarm_attack_result ON public.alerts USING btree (attack_result)
public | alerts | index_attack_alarm_attack_type | | CREATE INDEX index_attack_alarm_attack_type ON public.alerts USING btree (attack_type)
public | alerts | index_attack_alarm_suffer_branch_id | | CREATE INDEX index_attack_alarm_suffer_branch_id ON public.alerts USING btree (suffer_branch_id)
public | alerts | index_attack_alarm_last_time | | CREATE INDEX index_attack_alarm_last_time ON public.alerts USING btree (last_time)
public | alerts | index_attack_alarm_priority | | CREATE INDEX index_attack_alarm_priority ON public.alerts USING btree (priority)
public | alerts | index_attack_alarm_reliability | | CREATE INDEX index_attack_alarm_reliability ON public.alerts USING btree (reliability)
public | alerts | index_attack_alarm_rule_id | | CREATE INDEX index_attack_alarm_rule_id ON public.alerts USING hash (rule_id)
public | alerts | index_attack_alarm_sub_attack_type | | CREATE INDEX index_attack_alarm_sub_attack_type ON public.alerts USING btree (sub_attack_type)
public | alerts | attack_alarm_pkey | | CREATE UNIQUE INDEX attack_alarm_pkey ON public.alerts USING btree (id)
public | alerts | index_attack_alarm_event_desc | | CREATE INDEX index_attack_alarm_event_desc ON public.alerts USING gin (event_desc gin_trgm_ops)
(10 rows)
// 查看alerts表的索引所占的总磁盘空间
postgres=# select
pg_size_pretty(pg_indexes_size('alerts')) as indexes,
pg_size_pretty(
pg_relation_size('index_attack_alarm_priority') +
pg_relation_size('index_attack_alarm_last_time') +
pg_relation_size('index_attack_alarm_attack_result') +
pg_relation_size('index_attack_alarm_attack_type') +
pg_relation_size('index_attack_alarm_suffer_branch_id') +
pg_relation_size('index_attack_alarm_reliability') +
pg_relation_size('index_attack_alarm_rule_id') +
pg_relation_size('index_attack_alarm_sub_attack_type') +
pg_relation_size('attack_alarm_pkey') +
pg_relation_size('index_attack_alarm_event_desc')
) as sum;
indexes | sum
---------+--------
149 MB | 149 MB
(1 row)
// 查看数据库的oid
postgres=# select datname,oid from pg_database;
datname | oid
-----------+-------
postgres | 13580
test | 16411
template1 | 1
template0 | 13579
(4 rows)
// 根据数据库oid或者名称查看数据库占用的磁盘空间大小
postgres=# select pg_size_pretty(pg_database_size(13580));
pg_size_pretty
----------------
558 MB
(1 row)
postgres=# select pg_size_pretty(pg_database_size('postgres'));
pg_size_pretty
----------------
558 MB
(1 row)
// pg_total_relation_size等于pg_table_size和pg_indexes_size的总和
postgres=# select pg_size_pretty(pg_table_size('alerts')) as table_size,
pg_size_pretty(pg_indexes_size('alerts')) as index_size,
pg_size_pretty(pg_total_relation_size('alerts')) as total;
table_size | index_size | total
------------+------------+--------
391 MB | 149 MB | 540 MB
(1 row)
```
# <span style="font-size:15px">**数据库对象定位函数**</span>
| 名称 | 返回类型 | 描述 |
| --- | --- | --- |
| pg_relation_filenode(relation regclass)| oid | 接受一个表、索引、序列或 TOAST 表的 OID 或名称,返回当前分配给它的“filenode”号 |
| pg_relation_filepath(relation regclass) | text | 与`pg_relation_filenode`类似,指定关系的文件路径名 |
| pg_filenode_relation(tablespace oid,filenode oid) | regclass | 查找与给定的表空间和文件节点相关的关系 |
```
// 查看alerts表文件的对应的存储位置
postgres=# select pg_relation_filepath('alerts');
pg_relation_filepath
----------------------
base/13580/16391
(1 row)
// 查看alerts表的filenode(relfilenode一般情况下和oid一致)
postgres=# select pg_relation_filenode('alerts');
pg_relation_filenode
----------------------
16391
(1 row)
// pg_filenode_relation是pg_relation_filenode的反向函数。给定一个“tablespace”OID 以及一个“filenode”,它会返回相关关系的 OID。
// 对于一个在数据库的默认表空间中的表,该表空间可以指定为 0
// 表空间的oid可以通过pg_tablespace查看
postgres=# SELECT * FROM pg_tablespace;
oid | spcname | spcowner | spcacl | spcoptions
------+------------+----------+--------+------------
1663 | pg_default | 10 | |
1664 | pg_global | 10 | |
(2 rows)
postgres=# select pg_filenode_relation(1663,16391);
pg_filenode_relation
----------------------
alerts
(1 row)
postgres=# select pg_filenode_relation(0,16391);
pg_filenode_relation
----------------------
alerts
(1 row)
```
# <span style="font-size:15px">**数据库分区信息函数**</span>
| 名称 | 返回类型 | 描述 |
| --- | --- | --- |
| pg_partition_tree(regclass) | setof record | 列出一个分区树中的表或索引的相关信息。给定的分区表或分区索引,每张表有一行 分区。 提供的信息包括分区的名称,它的直系父级的名称,一个布尔值,表示该分区是否是一个叶子,以及一个整数,表示它在层次结构中的级别。level的值从`0`开始,表示输入表或索引作为分区树的根,`1`表示其分区,`2`表示其分区,以此类推。 |
| pg_partition_ancestors(regclass) | setof regclass | 列出给定分区的祖先关系,包括分区本身。 |
| pg_partition_root(regclass) | regclass | R返回给定关系所属的分区树的最上层父节点。 |
# <span style="font-size:15px">**通用文件访问函数**</span>
这些函数提供了对数据库服务器所在机器上的文件的本地访问。只能访问数据库集簇目录以及`log_directory`中的文件,除非用户被授予了角色`pg_read_server_files`。
这些函数中的某些有一个可选的`missing_ok`参数, 它指定文件或者目录不存在时的行为。如果为`true`, 函数会返回 NULL (`pg_ls_dir`除外,它返回一个空 结果集)。如果为`false`,则发生一个错误。默认是`false`。
| 名称 | 返回类型 | 描述 |
| --- | --- | --- |
| pg_ls_dir(dirname text [missing_ok boolean,include_dot_dirs boolean]) | setof text | 列出目录中的内容。默认仅限于超级用户使用,但是可以给其他用户授予EXECUTE让他们运行这个函数。 |
| pg_ls_logdir() | setof record | 列出日志目录中文件的名称、尺寸以及最后修改时间。访问被授予给`pg_monitor`角色的成员,并且可以被授予给其他非超级用户角色。 |
| pg_ls_waldir() | setof record | 列出WAL目录中文件的名称、尺寸以及最后修改时间。访问被授予给`pg_monitor`角色的成员,并且可以被授予给其他非超级用户角色。 |
| pg_ls_archive_statusdir() | setof record | 列出WAL存档状态目录中文件的名称、大小和最后一次修改时间。访问权限只授予`pg_monitor`角色的成员,也可以授予其他非超级用户角色。 |
| pg_ls_tmpdir([tablespace oid]) | setof record | 为`tablespace`列出临时目录中文件的名称、大小和最后一次修改时间。 如果没有提供*`tablespace`*,则在临时目录中的`pg_default`表空间被使用。`pg_monitor`角色的成员可以访问,其他非超级用户角色也可以访问。 |
| pg_read_file(filename text [offset bigint,length bigint [,missing_ok boolean] ]) | text | 返回一个文本文件的内容。默认仅限于超级用户使用,但是可以给其他用户授予EXECUTE让他们运行这个函数。 |
| pg_read_binary_file(filename text [,offset bigint,length bigint[,missing_ok boolean] ]) | bytea | 返回一个文件的内容。默认仅限于超级用户使用,但是可以给其他用户授予EXECUTE让他们运行这个函数。 |
| pg_stat_file(filename text [,missing_ok boolean]) | record | 返回关于一个文件的信息。默认仅限于超级用户使用,但是可以给其他用户授予EXECUTE让他们运行这个函数。 |
* `pg_ls_dir`返回指定目录中所有文件(以及目录和其他特殊文件) 的名称。`include_dot_dirs`指示结果集中是否包括“.”和“..”。默认是false,但是 当missing_ok为true时把它们包括在内是有用的,因为可以把一个空目录与一个不存在的目录区分开。
* `pg_ls_logdir`返回日志目录中每个文件的名称、尺寸以及最后的修改时间(mtime)。默认情况下,只有超级用户以及`pg_monitor`角色的成员能够使用这个函数。可以使用GRANT把访问授予给其他人。
* `pg_ls_waldir`返回预写式日志(WAL)目录中每个文件的名称、尺寸以及最后的修改时间(mtime)。默认情况下,只有超级用户以及`pg_monitor`角色的成员能够使用这个函数。可以使用GRANT把访问授予给其他人。
* `pg_ls_archive_statusdir`返回WAL归档状态目录`pg_wal/archive_status`中每个文件的名称、大小和最后一次修改时间(mtime)。默认情况下,只有超级用户和`pg_monitor`角色的成员才能使用此函数。可使用GRANT授权其他用户访问。
* `pg_ls_tmpdir`返回指定的`tablespace`临时文件目录中每个文件的名称、大小和最后一次修改时间(mtime)。 如果没有提供`tablespace`,则使用`pg_default`表空间。 默认情况下,只有超级用户和`pg_monitor`角色的成员才能使用这个函数。 可使用`GRANT`授权其他用户访问。
* `pg_read_file`返回一个文本文件的一部分,从给定的`offset`开始,返回最多`length`字节(如果先到达文件末尾则会稍短)。如果`offset`为负,它相对于文件的末尾。如果`offset`和`length`被忽略,整个文件都被返回。从文件中读的字节被使用服务器编码解释成一个字符串;如果它们在编码中不合法则抛出一个错误。
* `pg_read_binary_file`与`pg_read_file`相似,除了前者的结果是一个`bytea`值;相应地,不会执行编码检查。通过与`convert_from`函数结合,这个函数可以用来读取一个指定编码的文件:
```
SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');
```
* `pg_stat_file`返回一个记录,其中包含文件尺寸、最后访问时间戳、最后修改时间戳、最后文件状态改变时间戳(只支持 Unix 平台)、文件创建时间戳(只支持 Windows)和一个`boolean`指示它是否为目录。通常的用法包括:
```
SELECT * FROM pg_stat_file('filename');
SELECT (pg_stat_file('filename')).modification;
```
- PHP
- PHP基础
- PHP介绍
- 如何理解PHP是弱类型语言
- 超全局变量
- $_SERVER详解
- 字符串处理函数
- 常用数组函数
- 文件处理函数
- 常用时间函数
- 日历函数
- 常用url处理函数
- 易混淆函数区别(面试题常见)
- 时间戳
- PHP进阶
- PSR规范
- RESTFUL规范
- 面向对象
- 三大基本特征和五大基本原则
- 访问权限
- static关键字
- static关键字
- 静态变量与普通变量
- 静态方法与普通方法
- const关键字
- final关键字
- abstract关键字
- self、$this、parent::关键字
- 接口(interface)
- trait关键字
- instanceof关键字
- 魔术方法
- 构造函数和析构函数
- 私有属性的设置获取
- __toString()方法
- __clone()方法
- __call()方法
- 类的自动加载
- 设计模式详解
- 关于设计模式的一些建议
- 工厂模式
- 简单工厂模式
- 工厂方法模式
- 抽象工厂模式
- 区别和适用范围
- 策略模式
- 单例模式
- HTTP
- 定义
- 特点
- 工作过程
- request
- response
- HTTP状态码
- URL
- GET和POST的区别
- HTTPS
- session与cookie
- 排序算法
- 冒泡排序算法
- 二分查找算法
- 直接插入排序算法
- 希尔排序算法
- 选择排序算法
- 快速排序算法
- 循环算法
- 递归与尾递归
- 迭代
- 日期相关的类
- DateTimeInterface接口
- DateTime类
- DateTimeImmutable类
- DateInterval类
- DateTimeZone类
- DatePeriod类
- format参数格式
- DateInterval的format格式化参数
- 预定义接口
- ArrayAccess(数组式访问)接口
- Serializable (序列化)接口
- Traversable(遍历)接口
- Closure类
- Iterator(迭代器)接口
- IteratorAggregate(聚合迭代器) 接口
- Generator (生成器)接口
- composer
- composer安装与使用
- python
- python3执行tarfile解压文件报错:tarfile.ReadError:file could not be opened successfully
- golang
- 单元测试
- 单元测试框架
- Golang内置testing包
- GoConvey库
- testify库
- 打桩与mock
- GoMock框架
- Gomonkey框架
- HTTP Mock
- httpMock
- mux库/httptest
- 数据库
- MYSQL
- SQL语言的分类
- 事务(重点)
- 索引
- 存储过程
- 触发器
- 视图
- 导入导出数据库
- 优化mysql数据库的方法
- MyISAM与InnoDB区别
- 外连接、内连接的区别
- 物理文件结构
- PostgreSQL
- 编译安装
- pgsql常用命令
- pgsql应用目录(bin目录)文件结构解析
- pg_ctl
- initdb
- psql
- clusterdb
- cluster命令
- createdb
- dropdb
- createuser
- dropuser
- pg_config
- pg_controldata
- pg_checksums
- pgbench
- pg_basebackup
- pg_dump
- pg_dumpall
- pg_isready
- pg_receivewal
- pg_recvlogical
- pg_resetwal
- pg_restore
- pg_rewind
- pg_test_fsync
- pg_test_timing
- pg_upgrade
- pg_verifybackup
- pg_archivecleanup
- pg_waldump
- postgres
- reindexdb
- vacuumdb
- ecpg
- pgsql数据目录文件结构解析
- pgsql数据目录文件结构解析
- postgresql.conf解析
- pgsql系统配置参数说明
- pgsql索引类型
- 四种索引类型解析
- 索引之ctid解析
- 索引相关操作
- pgsql函数解析
- pgsql系统函数解析
- pgsql窗口函数解析
- pgsql聚合函数解析
- pgsql系统表解析
- pg_stat_all_indexes
- pg_stat_all_tables
- pg_statio_all_indexes
- pg_statio_all_tables
- pg_stat_database
- pg_stat_statements
- pg_extension
- pg_available_extensions
- pg_available_extension_versions
- pgsql基本原理
- 进程和内存结构
- 存储结构
- 数据文件的内部结构
- 垃圾回收机制VACUUM
- 事务日志WAL
- 并发控制
- 介绍
- 事务ID-txid
- 元组结构-Tuple Structure
- 事务状态记录-Commit Log (clog)
- 事务快照-Transaction Snapshot
- 事务快照实例
- 事务隔离
- 事务隔离级别
- 读已提交-Read committed
- 可重复读-Repeatable read
- 可序列化-Serializable
- 读未提交-Read uncommitted
- 锁机制
- 扩展机制解析
- 扩展的定义
- 扩展的安装方式
- 自定义创建扩展
- 扩展的管理
- 扩展使用实例
- 在pgsql中使用last、first聚合函数
- pgsql模糊查询不走索引的解决方案
- pgsql的pg_trgm扩展解析与验证
- 高可用
- LNMP
- LNMP环境搭建
- 一键安装包
- 搭建方法
- 配置文件目录
- 服务器管理系统
- 宝塔(Linux)
- 安装与使用
- 开放API
- 自定义apache日志
- 一键安装包LNMP1.5
- LNMP1.5:添加、删除站点
- LNMP1.5:php多版本切换
- LNMP1.5 部署 thinkphp项目
- Operation not permitted解决方法
- Nginx
- Nginx的产生
- 正向代理和反向代理
- 负载均衡
- Linux常用命令
- 目录与文件相关命令
- 目录操作命令
- 文件编辑命令
- 文件查看命令
- 文件查找命令
- 文件权限命令
- 文件上传下载命令
- 用户和群组相关命令
- 用户与用户组的关系
- 用户相关的系统配置文件
- 用户相关命令
- 用户组相关命令
- 压缩与解压相关命令
- .zip格式
- .tar.gz格式
- .gz格式
- .bz2格式
- 查看系统版本
- cpuinfo详解
- meminfo详解
- getconf获取系统信息
- 磁盘空间相关命令
- 查看系统负载情况
- 系统环境变量
- 网络相关命令
- ip命令详解
- ip命令格式详解
- ip address命令详解
- ip link命令详解
- ip rule命令详解
- ip route命令详解
- nslookup命令详解
- traceroute命令详解
- netstat命令详解
- route命令详解
- tcpdump命令详解
- 系统进程相关命令
- ps命令详解
- pstree命令详解
- kill命令详解
- 守护进程-supervisord
- 性能监控相关命令
- top命令详解
- iostat命令详解
- pidstat命令详解
- iotop命令详解
- mpstat命令详解
- vmstat命令详解
- ifstat命令详解
- sar命令详解
- iftop命令详解
- 定时任务相关命令
- ssh登录远程主机
- ssh口令登录
- ssh公钥登录
- ssh带密码登录
- ssh端口映射
- ssh配置文件
- ssh安全设置
- 历史纪录
- history命令详解
- linux开启操作日志记录
- 拓展
- git
- git初始化本地仓库-https
- git初始化仓库-ssh
- git-查看和设置config配置
- docker
- 概念
- docker原理
- docker镜像原理
- docker Overlay2 文件系统原理
- docker日志原理
- docker日志驱动
- docker容器日志管理
- 原理论证
- 验证容器的启动是作为Docker Daemon的子进程
- 验证syslog类型日志驱动
- 验证journald类型日志驱动
- 验证local类型日志驱动
- 修改容器的hostname
- 修改容器的hosts
- 验证联合挂载技术
- 验证启动多个容器对于磁盘的占用情况
- 验证写时复制原理
- 验证docker内容寻址原理
- docker存储目录
- /var/lib/docker目录
- image目录
- overlay2目录
- 数据卷
- 具名挂载和匿名挂载
- 数据卷容器
- Dockerfile详解
- dockerfile指令详解
- 实例:构造centos
- 实例:CMD和ENTRYPOINT的区别
- docker网络详解
- docker-compose
- 缓存
- redis
- redis的数据类型和应用场景
- redis持久化
- RDB持久化
- AOF持久化
- redis缓存穿透、缓存击穿、缓存雪崩
- 常见网络攻击类型
- CSRF攻击
- XSS攻击
- SQL注入
- Cookie攻击
- 历史项目经验
- 图片上传项目实例
- 原生php上传方法实例
- base64图片流
- tp5的上传方法封装实例
- 多级关系的递归查询
- 数组转树结构
- thinkphp5.1+ajax实现导出Excel
- JS 删除数组的某一项
- 判断是否为索引数组
- ip操作