PostgreSQL之日常维护
文章平均质量分 55
涉及PostgreSQL数据库日常维护的日志清理、统计信息管理、表膨胀管理等的方方面面。
瀚高PG实验室
瀚高PG实验室(Highgo PG Lab)依托于瀚高DBA运维团队及瀚高数据库PG内核研发团队,旨在深入研究PostgreSQL技术、使用技巧、内核探秘、PG教学等,并进行分享。欢迎大家关注、交流。
展开
-
在PG或HGDB上启用块校验checksum
在PG或HGDB上启用块校验checksum原创 2023-09-14 09:50:11 · 389 阅读 · 0 评论 -
解决postgresql数据库锁表问题
查询是否锁表了create view viewlocks asSELECT waiting.locktype AS waiting_locktype, --可锁定对象的类型:relation, extend, page, tuple,transactionid, virtualxid,object, userlock, advisory waiting.relation::regclass AS waiting_table, --等待表 wait原创 2021-12-14 14:23:32 · 3288 阅读 · 1 评论 -
PostgreSQL数据库设置登录数据库密码
PostgreSQL数据库安装完以后会默认创建一个管理员的账号postgres用户,默认登录时是不需要密码验证就可以直接登录的用命令行的sql语句来进行修改登录到PostgreSQL数据库里alter role postgres with password '123456'; 设置密码,单引号里就是要设置的密码cp /pgsql/9.3/data/pg_hba.conf /pgsql/9.3/data/pg_hba.conf.bak 备份要修改的配置文件vim /pgsql/9.3原创 2021-12-14 14:22:42 · 5061 阅读 · 0 评论 -
PostgreSQL数据库备份和恢复
一、bak方式备份和恢复(一)备份1、cmd到PostgreSQL安装目录bin下2、备份命令pg_dump -h 127.0.0.1 -U postgres postgres > D:\pgdb.bak3、指令解释如上命令,pg_dump 是备份数据库指令;127.0.0.1是数据库的ip地址;postgres 是数据库的用户名;postgres 是数据库名;> 意思是导出到指定目录;(二)恢复1、恢复命令psql -h localhost -U postgres原创 2021-12-14 14:22:03 · 1636 阅读 · 1 评论 -
PostgreSQL数据库 实现ID自增
PostgreSQL 使用序列来标识数据库的自增长,数据类型有 smallserial、serial 和 bigserial。create table tb_user_test(id SERIAL,name vatchar);SMALLSERIAL、SERIAL 和 BIGSERIAL 范围:虚假类型存储大小范围SMALLSERIAL2字节1 到 32,767SERIAL4字节1 到 2,147,483,647BIGSERIAL8字节1 到 922,33原创 2021-12-14 14:21:16 · 3022 阅读 · 0 评论 -
PostgreSQL存储过程-基于SQL的存储过程
什么是SQL函数?SQL函数包体是一些可执行的SQL语言。同时包含1条以上的查询,但是函数只返回最后一个查询(必须是SELECT)的结果。除非SQL函数声明为返回void,否则最后一条语句必须是SELECT在简单情况下,返回最后一条查询结果的第一行。如果最后一个查询不返回任何行,那么该函数将返回NULL值。如果需要该函数返回最后一条SELECT语句的所有行,可以将函数的返回值定义为集合,即SETOF sometype。模板CREATE OR REPLACE FUNCTION functio原创 2021-12-14 14:19:56 · 1854 阅读 · 0 评论 -
PostgreSQL 数据库导入导出
关于pg_dump:pg_dump – 将一个PostgreSQL数据库抽出到一个脚本文件或者其它归档文件中。pg_dump是一个用于备份PostgreSQL数据库的实用工具,即使当前数据库正在使用,也能够生成一致性的备份,且不会阻塞其他用户访问数据库(包括读、写)。PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件。pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复数据至导出时间点。pg_dump只能备份一个数据库原创 2021-12-14 14:17:40 · 8828 阅读 · 0 评论 -
PostgreSQL 时间/日期函数和操作符
数字类型类型名称存储长度描述范围smallint2字节小范围整数类型±2^15-1integer4字节整数类型±2^31-1bigint8字节大范围整数类型±2^63-1decimal可变用户指定精度小数点前131072位;小数点后16383位numeric可变用户指定精度小数点前131072位;小数点后16383位real4字节变长,不精确6位十进制精度double precision8字节变长,不精确原创 2021-12-03 15:47:25 · 2088 阅读 · 0 评论 -
PostgreSQL 常用函数
PostgreSQL 常用函数PostgreSQL 内置函数也称为聚合函数,用于对字符串或数字数据执行处理。下面是所有通用 HighGo DB 内置函数的列表:COUNT 函数:用于计算数据库表中的行数。MAX 函数:用于查询某一特定列中最大值。MIN 函数:用于查询某一特定列中最小值。AVG 函数:用于计算某一特定列中平均值。SUM 函数:用于计算数字列所有值的总和。ARRAY 函数:用于输入值(包括null)添加到数组中。Numeric 函数:完整列出一个 SQL 中所需原创 2021-12-03 15:45:14 · 6222 阅读 · 0 评论 -
PostgreSQL HAVING 子句
HAVING 子句HAVING 子句可以让我们筛选分组后的各组数据。WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创建的分组上设置条件。语法下面是 HAVING 子句在 SELECT 查询中的位置:SELECTFROMWHEREGROUP BYHAVINGORDER BYHAVING 子句必须放置于 GROUP BY 子句后面,ORDER BY 子句前面,下面是 HAVING 子句在 SELECT 语句中基础语法:SELECT column原创 2021-11-29 16:16:25 · 1833 阅读 · 0 评论 -
PostgreSQL DISTINCT 关键字
DISTINCT 关键字在 PostgreSQL 中,DISTINCT 关键字与 SELECT 语句一起使用,用于去除重复记录,只获取唯一的记录。我们平时在操作数据时,有可能出现一种情况,在一个表中有多个重复的记录,当提取这样的记录时,DISTINCT 关键字就显得特别有意义,它只获取唯一一次记录,而不是获取重复记录。语法用于去除重复记录的 DISTINCT 关键字的基本语法如下:SELECT DISTINCT column1, column2,.....columnNFROM table_na原创 2021-11-29 16:03:06 · 1652 阅读 · 0 评论 -
PostgreSQL PRIVILEGES(权限)
PostgreSQL PRIVILEGES(权限)无论何时创建数据库对象,都会为其分配一个所有者,所有者通常是执行 create 语句的人。对于大多数类型的对象,初始状态是只有所有者(或超级用户)才能修改或删除对象。要允许其他角色或用户使用它,必须为该用户设置权限。在 PostgreSQL 中,权限分为以下几种:SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE原创 2021-11-29 15:47:17 · 2133 阅读 · 0 评论 -
PostgreSQL NULL 值
PostgreSQL NULL 值NULL 值代表遗漏的未知数据。默认地,表的列可以存放 NULL 值。本章讲解 IS NULL 和 IS NOT NULL 操作符。语法当创建表时,NULL 的基本语法如下:CREATE TABLE COMPANY( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS原创 2021-11-29 15:36:27 · 2548 阅读 · 0 评论 -
PostgreSQL LOCK(锁)
PostgreSQL LOCK(锁)锁主要是为了保持数据库数据的一致性,可以阻止用户修改一行或整个表,一般用在并发较高的数据库中。在多个用户访问数据库的时候若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。数据库中有两种基本的锁:排它锁(Exclusive Locks)和共享锁(Share Locks)。如果数据对象加上排它锁,则其他的事务不能对它读取和修改。如果加上共享锁,则该数据库对象可以被其他事务读取,但不能修改。LOCK 命令语法LOCK 命令基础语法如下:LO原创 2021-11-29 15:29:06 · 1548 阅读 · 0 评论 -
PostgreSQL AUTO INCREMENT(自动增长)
PostgreSQL AUTO INCREMENT(自动增长)AUTO INCREMENT(自动增长) 会在新记录插入表中时生成一个唯一的数字。PostgreSQL 使用序列来标识字段的自增长,数据类型有 smallserial、serial 和 bigserial 。这些属性类似于 MySQL 数据库支持的 AUTO_INCREMENT 属性。使用 MySQL 设置自动增长的语句如下:CREATE TABLE IF NOT EXISTS `hgdb_tbl`( `hgdb_id` INT U原创 2021-11-29 14:47:29 · 3309 阅读 · 0 评论 -
PostgreSQL ALTER TABLE 命令
PostgreSQL ALTER TABLE 命令在 PostgreSQL 中,ALTER TABLE 命令用于添加,修改,删除一张已经存在表的列。另外你也可以用 ALTER TABLE 命令添加和删除约束。语法用 ALTER TABLE 在一张已存在的表上添加列的语法如下:ALTER TABLE table_name ADD column_name datatype;在一张已存在的表上 DROP COLUMN(删除列),语法如下:ALTER TABLE table_name DROP CO原创 2021-11-29 14:40:00 · 2486 阅读 · 0 评论 -
PostgreSQL TRANSACTION(事务)
PostgreSQL TRANSACTION(事务)TRANSACTION(事务)是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。数据库事务通常包含了一个序列的对数据库的读/写操作。包含有以下两个目的:为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作互相干扰。当事务被提交给了数据库管理系统(DBMS),则 DBMS 需要确原创 2021-11-26 16:03:53 · 1516 阅读 · 0 评论 -
PostgreSQL TRUNCATE TABLE
PostgreSQL TRUNCATE TABLEPostgreSQL 中 TRUNCATE TABLE 用于删除表的数据,但不删除表结构。也可以用 DROP TABLE 删除表,但是这个命令会连表的结构一起删除,如果想插入数据,需要重新建立这张表。TRUNCATE TABLE 与 DELETE 具有相同的效果,但是由于它实际上并不扫描表,所以速度更快。 此外,TRUNCATE TABLE 可以立即释放表空间,而不需要后续 VACUUM 操作,这在大型表上非常有用。PostgreSQL VACUUM原创 2021-11-26 15:53:01 · 1745 阅读 · 0 评论 -
PostgreSQL UNION 操作符
PostgreSQL UNION 操作符PostgreSQL UNION 操作符合并两个或多个 SELECT 语句的结果。UNION 操作符用于合并两个或多个 SELECT 语句的结果集。请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。语法UNIONS 基础语法如下:SELECT column1 [, column2 ]FROM table1 [, table2 ][WHERE condit原创 2021-11-26 15:48:29 · 2068 阅读 · 0 评论 -
PostgreSQL View(视图)
PostgreSQL View(视图)View(视图)是一张假表,只不过是通过相关的名称存储在数据库中的一个 PostgreSQL 语句。View(视图)实际上是一个以预定义的 PostgreSQL 查询形式存在的表的组合。View(视图)可以包含一个表的所有行或从一个或多个表选定行。View(视图)可以从一个或多个表创建,这取决于要创建视图的 PostgreSQL 查询。View(视图)是一种虚拟表,允许用户实现以下几点:用户或用户组认为更自然或直观查找结构数据的方式。限制数据访问,用户只原创 2021-11-26 15:36:32 · 1862 阅读 · 0 评论 -
PostgreSQL 别名
PostgreSQL 别名我们可以用 SQL 重命名一张表或者一个字段的名称,这个名称就叫着该表或该字段的别名。创建别名是为了让表名或列名的可读性更强。SQL 中 使用 AS 来创建别名。语法表的别名语法:SELECT column1, column2....FROM table_name AS alias_nameWHERE [condition];列的别名语法:SELECT column_name AS alias_nameFROM table_nameWHERE [condi原创 2021-11-26 15:28:56 · 2163 阅读 · 0 评论 -
PostgreSQL 触发器
PostgreSQL 触发器PostgreSQL 触发器是数据库的回调函数,它会在指定的数据库事件发生时自动执行/调用。下面是关于 PostgreSQL 触发器几个比较重要的点:PostgreSQL 触发器可以在下面几种情况下触发:在执行操作之前(在检查约束并尝试插入、更新或删除之前)。在执行操作之后(在检查约束并插入、更新或删除完成之后)。更新操作(在对一个视图进行插入、更新、删除时)。触发器的 FOR EACH ROW 属性是可选的,如果选中,当操作修改时每行调用一次;原创 2021-11-26 15:17:19 · 4833 阅读 · 0 评论 -
PostgreSQL 连接(JOIN)
PostgreSQL 连接(JOIN)PostgreSQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。在 PostgreSQL 中,JOIN 有五种连接类型:CROSS JOIN :交叉连接INNER JOIN:内连接LEFT OUTER JOIN:左外连接RIGHT OUTER JOIN:右外连接FULL OUTER JOIN:全外连接接下来让我们创建两张表 COMPANY 和 DEPARTMENT。实例创建 COMPANY 表,数据内容如下:原创 2021-11-26 15:05:09 · 3446 阅读 · 0 评论 -
PostgreSQL 索引
PostgreSQL 索引索引是加速搜索引擎检索数据的一种特殊表查询。简单地说,索引是一个指向表中数据的指针。一个数据库中的索引与一本书的索引目录是非常相似的。拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。索引有助于加快 SELECT 查询和 WHERE 子句,但它会减慢使用 UPDATE 和 INSERT 语句时的数据输入。索引可以创建或删除,但不会影响数据。使用 CREATE INDEX 语句创建索引,它允许命名索引,指定表及要索引的一列原创 2021-11-26 14:25:08 · 1446 阅读 · 0 评论 -
PostgreSQL 子查询
PostgreSQL 子查询子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。一个 SELECT 语句的查询结果能够作为另一个语句的输入值。子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。以下是子查询必须遵循的几个规则:子查询必须用括号括起来。子查询在 SELECT 子句中只能有一个列,除非在主查询中有多列,原创 2021-11-25 16:10:02 · 1716 阅读 · 0 评论 -
PostgreSQL UPDATE 语句
UPDATE 语句如果我们要更新在 highgodb 数据库中的数据,我们可以用 UPDATE 来操作。语法以下是 UPDATE 语句修改数据的通用 SQL 语法:UPDATE table_nameSET column1 = value1, column2 = value2...., columnN = valueNWHERE [condition];● 我们可以同时更新一个或者多个字段。● 我们可以在 WHERE 子句中指定任何条件。实例创建 class表,数据内容如下:highg原创 2021-11-25 15:19:39 · 3117 阅读 · 0 评论 -
PostgreSQL ORDER BY 语句
ORDER BY 语句在 highgodb中,ORDER BY 用于对一列或者多列数据进行升序(ASC)或者降序(DESC)排列。语法ORDER BY 子句的基础语法如下:SELECT column-listFROM table_name[WHERE condition][ORDER BY column1, column2, .. columnN] [ASC | DESC];您可以在 ORDER BY 中使用一列或者多列,但是必须保证要排序的列必须存在。ASC 表示升序,DESC 表示降序。原创 2021-11-25 15:16:00 · 2360 阅读 · 0 评论 -
PostgreSQL LIMIT 子句
LIMIT 子句highgodb中的 limit 子句用于限制 SELECT 语句中查询的数据的数量。语法带有 LIMIT 子句的 SELECT 语句的基本语法如下:SELECT column1, column2, columnNFROM table_nameLIMIT [no of rows]下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法:SELECT column1, column2, columnN FROM table_nameLIMIT [no of rows原创 2021-11-25 15:10:40 · 1439 阅读 · 0 评论 -
PostgreSQL LIKE 子句
LIKE 子句在 highgodb数据库中,我们如果要获取包含某些字符的数据,可以使用 LIKE 子句。在 LIKE 子句中,通常与通配符结合使用,通配符表示任意字符,在 highgodb中,主要有以下两种通配符:● 百分号 %● 下划线 _如果没有使用以上两种通配符,LIKE 子句和等号 = 得到的结果是一样的。语法以下是使用 LIKE 子句搭配百分号 % 和下划线 _ 从数据库中获取数据的通用语法:SELECT FROM table_name WHERE column LIKE 'XXX原创 2021-11-25 15:01:57 · 1572 阅读 · 0 评论 -
PostgreSQL GROUP BY 语句
GROUP BY 语句在 highgodb中,GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。语法下面给出了 GROUP BY 子句的基本语法:SELECT column-listFROM table_nameWHERE [ conditions ]GROUP BY column1, column2....columnNORDER BY column1原创 2021-11-25 14:45:51 · 2055 阅读 · 1 评论 -
PostgreSQL DELETE 语句
DELETE 语句你可以使用 DELETE 语句来删除 highgodb 表中的数据。语法以下是 DELETE 语句删除数据的通用语法:DELETE FROM table_name WHERE [condition];如果没有指定 WHERE 子句,highgodb表中的所有记录将被删除。一般我们需要在 WHERE 子句中指定条件来删除对应的记录,条件语句可以使用 AND 或 OR 运算符来指定一个或多个。实例创建 class表,数据内容如下:highgo=# select * from原创 2021-11-25 14:42:16 · 2699 阅读 · 0 评论 -
PostgreSQL AND & OR 运算符
AND & OR 运算符在 highgodb 中,AND 和 OR 也叫连接运算符,在查询数据时用于缩小查询范围,我们可以用 AND 或者 OR 指定一个或多个查询条件。ANDAND 运算符表示一个或者多个条件必须同时成立。在 WHERE 子句中,AND 的使用语法如下:SELECT column1, column2, columnNFROM table_nameWHERE [condition1] AND [condition2]...AND [conditionN];实例创建原创 2021-11-25 14:39:09 · 2117 阅读 · 0 评论 -
PostgreSQL 运算符
运算符运算符是一种告诉编译器执行特定的数学或逻辑操作的符号。PostgreSQL 运算符是一个保留关键字或字符,一般用在 WHERE 语句中,作为过滤条件。常见的运算符有:●算术运算符●比较运算符●逻辑运算符●按位运算符算术运算符假设变量 a 为 2,变量 b 为 3,则:运算符描述实例+加……-减a - b 结果为 -1*乘a * b 结果为 6/除b / a 结果为 1%模(取余)b % a 结果为 1^指数原创 2021-11-25 14:31:22 · 2987 阅读 · 0 评论 -
PostgreSQL 表达式
表达式表达式是由一个或多个的值、运算符、函数组成的。表达式类似一个公式,我们可以将其应用在查询语句中,用来查找数据库中指定条件的结果集。语法SELECT 语句的语法格式如下:SELECT column1, column2, columnNFROM table_nameWHERE [CONDITION | EXPRESSION];Highgodb 的表达式可以有不同类型,我们接下来会讲到。布尔表达式布尔表达式是根据一个指定条件来读取数据:SELECT column1, column2,原创 2021-11-24 15:21:32 · 1481 阅读 · 0 评论 -
PostgreSQL WHERE 子句
在 highgodb 中,当我们需要根据指定条件从单张表或者多张表中查询数据时,就可以在 SELECT 语句中添加 WHERE 子句,从而过滤掉我们不需要数据。WHERE 子句不仅可以用于 SELECT 语句中,同时也可以用于 UPDATE,DELETE 等等语句中。语法以下是 SELECT 语句中使用 WHERE 子句从数据库中读取数据的通用语法:SELECT column1, column2, columnNFROM table_nameWHERE [condition1]我们可以在 W原创 2021-11-24 15:06:09 · 1692 阅读 · 0 评论 -
PostgreSQL SELECT 语句
PostgreSQL SELECT 语句用于从数据库中选取数据。结果被存储在一个结果表中,称为结果集。语法SELECT 语句语法格式如下:SELECT column1, column2,...columnN FROM table_name;● column1, column2,…columnN 为表中字段名。● table_name 为表名。如果我们想读取表中的所有数据可以使用以下 SQL 语句:SELECT * FROM table_name;例如我们要读取class表的数据,使用原创 2021-11-24 15:00:24 · 1987 阅读 · 0 评论 -
PostgreSQL INSERT INTO 语句
PostgreSQL INSERT INTO 语句PostgreSQL INSERT INTO 语句用于向表中插入新记录。我们可以插入一行也可以同时插入多行。语法INSERT INTO 语句语法格式如下:INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)VALUES (value1, value2, value3,...valueN);column1, column2,…columnN 为表中字段名。value1,原创 2021-11-24 13:58:52 · 2913 阅读 · 0 评论 -
PostgreSQL 模式(SCHEMA)
PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。一个模式可以包含视图、索引、数据类型、函数和操作符等。相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schema1 和 myschema 都可以包含名为 mytable 的表。使用模式的优势:允许多个用户使用一个数据库并且不会互相干扰。将数据库对象组织成逻辑组以便更容易管理。第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。模式类似于操作系统层的目录,但是模式不能嵌套。语法我们可以原创 2021-11-24 13:53:17 · 1508 阅读 · 1 评论 -
PostgreSQL 删除表格
PostgreSQL 使用 DROP TABLE 语句来删除表格,包含表格数据、规则、触发器等,所以删除表格要慎重,删除后所有信息就消失了。语法DROP TABLE 语法格式如下:DROP TABLE table_name;实例我们可以使用 \d 命令来查看表格:hgdb=# \d List of relations Schema | Name | Type | Owner --------+------------+-------+-------原创 2021-11-24 13:45:54 · 1691 阅读 · 0 评论 -
PostgreSQL 创建数据库表格
PostgreSQL 创建表格PostgreSQL 使用 CREATE TABLE 语句来创建数据库表格。语法CREATE TABLE 语法格式如下:CREATE TABLE table_name( column1 datatype, column2 datatype, column3 datatype, ..... columnN datatype, PRIMARY KEY( 一个或多个列 ));CREATE TABLE 是一个关键词,用于告诉数据库系统将原创 2021-11-23 17:15:09 · 2316 阅读 · 0 评论