来源 每次手动备份太麻烦了,工作上需要,决定使用自动备份,所以写个博客来记录一次,本次备份功能是无密码通过批处理来执行定时备份的,如果是windows server r2服务器的话大家可以搭配任务计划程序来做定时执行...对于归档格式,你可以在调用 pg_restore 的时候声明选项。 -b --blobs 在转储中包含大对象。必须选择一种非文本输出格式。...目前,为 --disable-triggers 发出的命令必须用超级用户来做。 因此,你应该同时用 -S 声明一个超级用户名,或者最好是用一个超级用户的身份来启动这个生成的脚本。...-e --exit-on-error 如果在向数据库发送 SQL 命令的时候碰到错误,则退出。 缺省是继续执行并且在恢复结束时显示一个错误计数。...缺省时,pg_restore 发出 ALTER OWNER 或 SET SESSION AUTHORIZATION 语句设置创建出来的模式元素的所有者权限。
脚本转储是包含 SQL 命令的纯文本文件,它们可以用来重构数据库到它被转储时的状态。要从这样一个脚本恢复,将它喂给psql。脚本文件甚至可以被用来在其他机器和其他架构上重构数据库。...另一种可选的归档文件格式必须与pg_restore配合使用来重建数据库。它们允许pg_restore能选择恢复什么,或者甚至在恢复之前对条目重排序。归档文件格式被设计为在架构之间可移植。...pg_dump可以被用来备份整个数据库,然后pg_restore可以被用来检查归档并/或选择数据库的哪些部分要被恢复。最灵活的输出文件格式是“自定义”格式(-Fc)和“目录”格式(-Fd)。...它们允许选择和重排序所有已归档项、支持并行恢复并且默认是压缩的。“目录”格式是唯一一种支持并行转储的格式。...当运行pg_dump时,我们应该检查输出中有没有任何警告(打印在标准错误上),特别是考虑到下面列出的限制。
也可以在命令行执行如下命令进行手动初始化 postgresql-setup initdb ?...否则可能出现在运行scm_prepare_database.sh脚本时验证错误而失败 host all all 127.0.0.1/32...注意:要成功运行pg_restore命令,数据库服务器上必须有现有数据库才能完成连接, 现有数据库不会被修改。...总结 在迁移过程中需要停止相关的服务和Cloudera Manager Server 在使用pg_restore命令导入数据库文件到外部PostgreSQL时,要成功运行pg_restore命令,需要与...本次连接使用的数据库是默认数据库postgres。如果-d 选项不包括在内,那么pg_restore 命令会失败。
但是,如果您已使用嵌入式数据库,并且无法重新部署新的群集,则必须迁移到外部PostgreSQL数据库,接下来本篇文章主要介绍如何将CM嵌入式PostgreSQL迁移到外部的PostgreSQL服务。...否则可能出现在运行scm_prepare_database.sh脚本时验证错误而失败。...注意:要成功运行pg_restore命令,数据库服务器上必须有现有数据库才能完成连接, 现有数据库不会被修改。...总结 1.在迁移过程中需要停止相关的服务和Cloudera Manager Server 2.在使用pg_restore命令导入数据库文件到外部PostgreSQL时,要成功运行pg_restore命令...本次连接使用的数据库是默认数据库postgres。如果-d 选项不包括在内,那么pg_restore 命令会失败。
2 可以将单列数据进行数据迁移 3 数据的迁出目的地必须操作数据库的LINUX账号必须有目的地的写入权限 4 数据导入的过程中程序使用的是标准的数据STDOUT STDIN 模式 5 物理导出仅仅涉及数据的导出...,并且使用多线程进行导出 使用多线程的方式是,必须使用 Fd 模式 目录模式,会生成多个压缩文件 pg_dump -d postgres -h 192.168.198.100 -p 5432 -U...header; 6 使用copy 方式导出数据时,进行数据的压缩 (使用psql 的外部命令执行方式标准 stdout 将数据直接压缩生成文件) psql -q -c "\copy (select...1 使用psql 命令直接执行导出逻辑SQL文件 2 使用pg_restore 导出 pg_dump 导出的封装格式的数据 3 使用copy from 方式 导入copy to 方式的数据 1...CPU的核心数 -e 参数为导出是如果遇到错误,会停止,默认pg_restore 导出数据是遇到错误是不会停止的 4 通过copy from 来导入纯数据 copy pgbench_accounts
user_name:拥有新数据库的⽤户的名称,或者使⽤默认所有者(执⾏命令的⽤户)DEFAULT。...; 设计表结构时必须加上字段数据的入库时间inputed_time和数据的更新时间updated_time; 查询规范 统计行数用count(*)或者count(1),count(列名)不会统计列为空的行...管理规范 数据订正时,删除和修改记录时,要先select,避免出现误删除,确认无误才能提交执行; 用户可以使用explain analyze查看实际的执行计划,但是如果需要查看的执行计划设计数据的变更,...必须在事务中执行explain analyze,然后回滚; 如何并行创建索引,不堵塞表的DML,创建索引时加CONCURRENTLY关键字,就可以并行创建,不会堵塞DML操作,否则会堵塞DML操作;(create...建议的方法是limit 1; 必须选择合适的事务隔离级别,不要使用越级的隔离级别,例如READ COMMITTED可以满足时,就不要使用repeatable read和serializable隔离级别;
该连接必须由一个具有REPLICATION权限或者具有超级用户权限的用户ID建立,并且pg_hba.conf必须允许该复制连接。...c custom 输出一个适合于作为pg_restore输入的自定义格式归档。和目录输出格式一起,这是最灵活的输出格式,它允许在恢复时手动选择和排序已归档的项。这种格式在默认情况还会被压缩。...4.pg_restore的局限性 在恢复数据到一个已经存在的表中并且使用了选项–disable-triggers时,pg_restore会在插入数据之前发出命令禁用用户表上的触发器,然后在完成数据插入后重新启用它们...如果恢复在中途停止,可能会让系统目录处于错误的状态。 pg_restore不能有选择地恢复大对象,例如只恢复特定表的大对象。...d testdb 三.单表数据备份恢复copy copy命令在平时日常维护中使用较为广泛,一方面是数据CSV的导出,另一方面是单表数据(特别是数据量不大时)的转移或者导出,都有很多的应用。
SQL转储 SQL 转储方法的思想是创建一个由SQL命令组成的文件,当把这个文件回馈给服务器时,服务器将利用其中的SQL命令重建与转储时状态一样的数据库。...这条命令不会创建数据库dbname,你必须在执行psql前自己从template0创建(例如,用命令createdb -T template0 dbname)。...默认情况下,psql脚本在遇到一个SQL错误后会继续执行。...在使用这种模式时,注意即使是很小的一个错误也会导致运行了数小时的恢复被回滚。但是,这仍然比在一个部分恢复后手工清理复杂的数据库要更好。...结果是,如果在恢复时使用的是一个自定义的template1,你必须从template0创建一个空的数据库,正如上面的例子所示。
第三列表示这个文件的“所有者账号” 第四列表示这个文件的所属的用户组 第五列为这个文件的大小,默认单位是B 第六列为这个文件的创建文件日期或者是最近的修改日期。...管道(FIFO,pipe):它的主要目的在解决多个程序同时访问一个文件所造成的错误问题。...第一个属性为p 4.2、Linux文件扩展名 基本上linux的文件是没有所谓的“扩展名”的。...一个linux文件能不能被执行,与它的第一列的10个属性有关,与文件名根本没有一点关系。只要你的权限中有x的话,即代表可以被执行。但是可以被执行和可以执行成功是不一样的。...能不能执行成功,需要看文件的内容。 虽然如此,我们还是希望可以通过扩展名来了解该文件是什么东西,还是会以适当的扩展名来表示该文件是什么种类的。
所有在块里使用的变量都必须在块的声明段里先进行声明,唯一的例外是FOR循环里的循环计数变量, 该变量被自动声明为整型。...; #执行该函数以进一步观察其执行的结果。...30--在这里的数量是80--在这里的数量是50 1)....如果给出了DEFAULT子句,该变量在进入BEGIN块时将被初始化为该缺省值,否则被初始化为SQL空 值。缺省值是在每次进入该块时进行计算的。...如果声明了NOT NULL,那么赋予NULL数值给该变量将导致一个运行时错误。因此所有声明为NOT NULL的变量也必须在声明时定义一个非空的缺省值。\1.
相关 《Postgresql源码(41)plpgsql函数编译执行流程分析》 《Postgresql源码(46)plpgsql中的变量类型及对应关系》 《Postgresql源码(49)plpgsql...函数编译执行流程分析总结》 《Postgresql源码(53)plpgsql语法解析关键流程、函数分析》 0-0 总结 plpgsql_yylex等价于server端的base_yylex,都是在lex...但是对于plpgsql复杂语法来说只向前看一个是不够的,所以plpgsql_yylex中会有多次调用internal_yylex拿后面的token,最多可能会向前看5个token(例如定义时有这样的变量...i3 public.tf1.c1%TYPE;变量类型需要一起解析出来,单独看每个token是没有意义的) plpgsql语法解析的整体流程和server类似: 拿到需要编译的字符串 plpgsql_yylex...token类型的匹配,即匹配anything;这样做的原因是类型的定义多种多样,如果按格式匹配要写很多。
下面是这些工具的简要概述和一些注意事项: 1. pg_dump 概述:pg_dump 是一个用于备份单个 PostgreSQL 数据库的工具。...2. pg_restore 概述:pg_restore 是一个用于从创建的备份文件恢复数据的工具。 用途:恢复数据库。...,默认是继续执行 -I, --index=NAME # 恢复指定名称的索引 -j, --jobs=NUM # 使用多个并行任务来恢复 -L, --use-list...-U postgres -h 127.0.0.1 -p 5432 -W -d mydb --data-only -j 4 db.dump 8:报错时退出,默认继续执行 pg_restore -d...测试:定期测试备份文件的恢复,以确保在需要时能够正确恢复数据。 性能:对于大型数据库,考虑使用流式备份或并行备份来提高备份和恢复的速度。 权限:确保执行备份和恢复的用户具有适当的权限。
相关 《Postgresql中plpgsql异常处理方法与实例(RAISE EXCEPTION)》 《Postgresql源码(80)plpgsql中异常处理编译与执行流程分析(sqlstate)...编译阶段: 根结构还是block,注意在block的exception部分会挂PLpgSQL_exception结构 block部分: 只记触发的异常关键字:condname=...异常关键字转码:sqlerrstate=33816706 异常关键字:condname=“division_by_zero” 执行什么: 正常挂执行block 执行阶段: 进入异常分支...,错误码}的数组,例如division_by_zero: typedef struct { const char *label; int sqlerrstate; } ExceptionLabelMap...} 3 执行 exec_stmts时PLpgSQL_stmt_block数据结构 [PLpgSQL_stmt_block] { cmd_type = PLPGSQL_STMT_BLOCK,
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG...2、由于用的是管道符,所以必须配置两个数据库远程登录信任关系。 3、迁移时两个数据库必须要有相同的表空间,需要提前创建。...支持的文本内容格式有两种,一种是tab制表符作为分隔符(不是空格);一种是逗号做为分隔符。...支持的文本内容格式有两种,一种是tab制表符作为分隔符(不是空格);一种是逗号做为分隔符。...支持的文本内容格式有两种,一种是tab制表符作为分隔符(不是空格);一种是逗号做为分隔符。
并且是热备范畴,备份的时候不需要停数据库,但,恢复的时候需要停数据库(多说一句,某些项目数据库是24小时不能停的,如果停了,可能接受不了,因此,备份前最好搞清楚自己是否能够接受冷备)。...不带-F参数的时候,默认是纯文本模式(纯文本模式备份的文件可以使用记事本打开,里面都是SQL语句) 归档格式的备份文件必须与pg_restore一起使用来重建数据库,这种格式允许pg_restore选择恢复哪些数据...归档模式的时候,必须使用pg_restore工具来进行恢复 以下仍然是单表的备份和恢复,备份文件名做了一个时间格式化,恢复的时候是使用pg_restore命令,使用psql将会报错。...,此类文件是二进制格式的,不可当做文本文件查看,恢复的时候必须使用pg_restore命令,例如上面的test-database.dump文件就是此类文件。...-1.txt两个文件是一模一样的): pg_restore -l -f TOC-1.txt test-database.dump 这个时候的TOC文件是可编辑的文本文件,不需要执行的部分删除或者;;注释掉就可以了
相关 《Postgresql源码(77)plpgsql中参数传递和赋值(pl参数)》 《Postgresql源码(78)plpgsql中调用call proc()时的参数传递和赋值(pl参数)》...;的入口函数ExecuteCallStmt:入参为CallStmt,函数中将CallStmt中的参数列表(可能是值、可能是表达式)赋值给fcinfo,然后通过PG函数框架进入plpgsql堆栈中,给对应入参的...fcinfo->args直接按funcexpr->args填充(如果是表达式就执行后在填充) 从0位置开始紧凑填充。...} 400是从哪来的?...:call tp13(1,2,3,4); 默认值错误的给e了,这条本应该报错,因为e无值。
;的入口函数ExecuteCallStmt:入参为CallStmt,函数中将CallStmt中的参数列表(可能是值、可能是表达式)赋值给fcinfo,然后通过PG函数框架进入plpgsql堆栈中,给对应入参的...fcinfo->args直接按funcexpr->args填充(如果是表达式就执行后在填充) 从0位置开始紧凑填充。...} 400是从哪来的?...到这里发现函数的默认值400是从fcinfo->args[2].value拿出来的,那么后面继续追溯下这个值是哪里添加的: 2 追溯:fcinfo->args来源?...:call tp13(1,2,3,4); 默认值错误的给e了,这条本应该报错,因为e无值。
一个函数体的完整文本必须是一个块。存储过程的语法如上所示。 在一个块中的每一个声明和每一个语句都由一个分号终止。 所有的关键词都是大小写无关的。...当有OUT或者INOUT参数时,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。...如果加了strict选项,那么查询结果必须是恰好一行,否则就会报错。 举个例子,现在在a表中插入数据,表a数据如下。 然后从表中查询出name值赋值val。...当被返回setof sometype时,函数最后一个查询执行完后输出的每一行都会被作为结果集的一个元素返回。 sometype可以是某一张已经存在的表,也可以是record。也可以是某个字段类型。...; 提示信息 官方文档:http://postgres.cn/docs/12/plpgsql-errors-and-messages.html 使用raise语句报告消息以及抛出错误,上面给的示例中已经有部分给出
另一个缺点是无法恢复到故障发生的时刻。例如,你使用crontab定时任务在凌晨3点进行备份,结果12点就出故障,如果进行恢复,就会损失9小时的数据。...要了解PITR,首先必须了解什么是wal,wal代表预写日志文件,基本上对数据库每次插入、更新、删除在实际应用之前,就写入了日志中。...[filename] – pg_restore -d dbname bakfile 二进制格式的备份只能使用 pg_restore 来还原, 可以指定还原的表, 编辑 TOC 文件, 定制还原的顺序...冷备是正常关闭服务后拷贝文件。热备是服务正常运行中拷贝文 件。 由于采用数据缓冲区机制,拷贝的文件数据会不一致。...,会产生一个带有备份标记的归档日志: 00000001000000000000000E.00000060.backup,通过分析,跟备份时的标记是一样的。
领取专属 10元无门槛券
手把手带您无忧上云