在postgreSQL中运行sql脚本和pg_restore命令方式-PostgreSQL
作者:邵子轩一号 | 来源:互联网 | 2023-09-05 21:48
在postgreSQL中运行sql脚本和pg_restore命令方式是千自学中一篇关于PostgreSQL的文章简介:今天踩坑了,把powerdesign生成的sql脚本文件,用pg_restore命令一直运行。。。过程惨不忍睹,一直以为是编码问题,修改了serve和client的encoding,结果。。。
今天踩坑了,把powerdesign生成的sql脚本文件,用pg_restore命令一直运行。。。
过程惨不忍睹,一直以为是编码问题,修改了serve和client的encoding,结果。。。
记录一下这个错误:
postgreSQL运行sql脚本文件:
psql -d dbname -U username -f (脚本所在位置).sql
postgerSQL的pg_restore命令
用法:
pg_restore [选项]… [文件名]
一般选项:
-d, --dbname=名字 连接数据库名字
-f, --file=文件名 输出文件名
-F, --format=c|d|t 备份文件格式(应该自动进行)
-l, --list 打印归档文件的 TOC 概述
-v, --verbose 详细模式
-V, --version 输出版本信息, 然后退出
-?, --help 显示此帮助, 然后退出
恢复控制选项:
-a, --data-only 只恢复数据, 不包括模式
-c, --clean 在重新创建之前,先清除(删除)数据库对象
-C, --create 创建目标数据库
-e, --exit-on-error 发生错误退出, 默认为继续
-I, --index=NAME 恢复指定名称的索引
-j, --jobs=NUM 执行多个并行任务进行恢复工作
-L, --use-list=FILENAME 从这个文件中使用指定的内容表排序
输出
-n, --schema=NAME 在这个模式中只恢复对象
-N, --exclude-schema=NAME 不恢复此模式中的对象
-O, --no-owner 不恢复对象所属者
-P, --function=NAME(args) 恢复指定名字的函数
-s, --schema-only 只恢复模式, 不包括数据
-S, --superuser=NAME 使用指定的超级用户来禁用触发器
-t, --table=NAME 恢复命名关系(表、视图等)
-T, --trigger=NAME 恢复指定名字的触发器
-x, --no-privileges 跳过处理权限的恢复 (grant/revoke)
-1, --single-transaction 作为单个事务恢复
–disable-triggers 在只恢复数据的过程中禁用触发器
–enable-row-security 启用行安全性
–if-exists 当删除对象时使用IF EXISTS
–no-comments 不恢复注释
–no-data-for-failed-tables 对那些无法创建的表不进行
数据恢复
–no-publications 不恢复发行
–no-security-labels 不恢复安全标签信息
–no-subscriptions 不恢复订阅
–no-tablespaces 不恢复表空间的分配信息
–section=SECTION 恢复命名节 (数据前、数据及数据后)
–strict-names 要求每个表和(或)schema包括模式以匹配至少一个实体
–use-set-session-authorization
使用 SESSION AUTHORIZATION 命令代替
ALTER OWNER 命令来设置所有权
联接选项:
-h, --host=主机名 数据库服务器的主机名或套接字目录
-p, --port=端口号 数据库服务器的端口号
-U, --username=名字 以指定的数据库用户联接
-w, --no-password 永远不提示输入口令
-W, --password 强制口令提示 (自动)
–role=ROLENAME 在恢复前执行SET ROLE操作
选项 -I, -n, -N, -P, -t, -T, 以及 --section 可以组合使用和指定
多次用于选择多个对象.
希望不要和我一样犯这个低级错误
顺便记录一下查看server和client的encoding以及修改
找到postgresql.conf文件,修改参数lc_messages的值为UTF8
重启PostgreSQL的服务。
----查看服务端字符集:
test=> show server_encoding;
—查看客户端字符集:
test=> show client_encoding;
补充:pg_restore及psql恢复数据的用法
一、使用psql恢复SQL文本格式的数据备份(即一个包含SQL脚本的文本文件)
恢复一个SQL备份文件并忽略过程中可能发生的所有错误:
psql -U postgres -f myglobals.sql
恢复一个SQL备份文件,如遇任何错误则立即停止恢复:
psql -U postgres --set ON_ERROR_STOP=ON -f myglobals.sql
将SQL文本中的数据恢复到某个指定的database:
psql -U postgres -d mydb -f select_objects.sql
二、使用pg_restore进行恢复
功能:
(1)支持并行恢复,使用-j选项可以控制并行恢复的线程数。多个恢复线程可以并行处理,每个线程处理一张表。该模式可以显著提高恢复速度。
(2)可以使用pg_restore扫描备份文件来生成一张备份内容列表,通过该列表可以确认备份红包含了哪些内容。还可以通过编辑该内容列表来控制恢复哪些内容。
(3)pg_dump支持选择性地仅备份部分对象以节省备份时间,类似的,pg_restore也支持选择性的仅恢复部分对象,不管备份文件本身是全库备份还是部分对象的备份都没有问题。
(4)pg_restore的大部分功能是向后兼容的,即支持将老版本PostgreSQL生产的备份数据恢复到新版本的PostgreSQL中。
在使用pg_restore执行恢复动作之前,请先创建目标数据库:
create database mydb;
然后执行恢复:
pg_restore --dbname=mydb --jobs=4 --verbose mydb.backup
如果备份和恢复时使用的database同名,则可以通过加--create选项省去单独建库的过程,如下:
pg_restore --dbname=postgres --create --jobs=4 --verbose mydb.backup
注:如果指定了--create选项,那么恢复出来的数据库名就会默认采用备份时的数据库名,不允许改名。如果还同时指定了--dbname选项,那么此时连接的数据库名一定不能是待恢复的数据库名,因为要恢复数据库之前必然要建数据库,而
要建数据库之前必然要先连到某个已存在的数据库,--dbname选项指定的就是建立被恢复的数据库之前先连到哪个数据库,所以必然不能与待恢复的数据库同名,我们一般指定先连到postgres数据库。
9.2版或更新版本的pg_restore支持--section选项,加上该选项后可以实现仅恢复表结构而不恢复表数据。具体做法是先创建目标恢复数据库:
create database mydb2;
然后使用pg_restore:
pg_restore --dbname=mydb2 --section=pre-data --jobs=4 mydb.backup
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
推荐阅读
-
本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ...
[详细]
蜡笔小新 2024-11-21 18:54:39
-
本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ...
[详细]
蜡笔小新 2024-11-21 17:42:08
-
-
本文详细介绍了JQuery Mobile框架中特有的事件和方法,帮助开发者更好地理解和应用这些特性,提升移动Web开发的效率。 ...
[详细]
蜡笔小新 2024-11-21 14:24:21
-
spring boot使用jetty无法启动 ...
[详细]
蜡笔小新 2024-11-21 10:15:52
-
本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ...
[详细]
蜡笔小新 2024-11-21 09:45:56
-
Web动态服务器Python基本实现 ...
[详细]
蜡笔小新 2024-11-21 08:01:30
-
本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ...
[详细]
蜡笔小新 2024-11-20 20:41:33
-
本文作为‘Java SE 8新特性概览’系列的一部分,将详细探讨Lambda表达式。通过多种示例,我们将展示Lambda表达式的不同应用场景,并解释编译器如何处理这些表达式。 ...
[详细]
蜡笔小新 2024-11-20 14:19:27
-
本文详细介绍了在Windows系统中如何配置Nginx以实现高效的缓存加速功能,包括关键的配置文件设置和示例代码。 ...
[详细]
蜡笔小新 2024-11-21 16:19:57
-
本文旨在为初学者提供关于如何使用FastRPC技术连接Qualcomm Hexagon DSP的基础知识。FastRPC技术允许开发者在本地客户端实现远程调用,从而简化Hexagon DSP的开发和调试过程。 ...
[详细]
蜡笔小新 2024-11-21 10:03:34
-
本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ...
[详细]
蜡笔小新 2024-11-20 19:24:42
-
3.[15]Writeaprogramtolistallofthekeysandvaluesin%ENV.PrinttheresultsintwocolumnsinASCIIbet ...
[详细]
蜡笔小新 2024-11-20 18:28:56
-
本文详细介绍了如何利用 Bootstrap Table 实现数据展示与操作,包括数据加载、表格配置及前后端交互等关键步骤。 ...
[详细]
蜡笔小新 2024-11-20 17:21:26
-
本文详细介绍了`android.os.Binder.getCallingPid()`方法的功能和应用场景,并提供了多个实际的代码示例。通过这些示例,开发者可以更好地理解如何在不同的开发场景中使用该方法。 ...
[详细]
蜡笔小新 2024-11-19 20:22:56
-
本文详细介绍了 Java 中 org.w3c.dom.Node 类的 isEqualNode() 方法的功能、参数及返回值,并通过多个实际代码示例来展示其具体应用。此方法用于检测两个节点是否相等,而不仅仅是判断它们是否为同一个对象。 ...
[详细]
蜡笔小新 2024-11-19 18:11:10
-