错误记录
“pg_upgrade_internal.log”: Permission denied
C:\WINDOWS\system32>pg_upgrade.exe -b D:\Master\pgsql_64\bin -B f:\DataBase\pgSQL\bin -d D:\Master\pgsql_64\data\agdata -D f:\DataBase\data -k -c
could not open log file "pg_upgrade_internal.log": Permission denied
故障,退出
原因: pg_upgrade 没有在指定目录下执行,所以需要切换到 postgreSQL/bin 目录下执行
例如,我的目录是f:\DataBase\pgSQL
C:\WINDOWS\system32> f:
f: cd \DataBase\pgSQL\bin>
F:\DataBase\pgSQL\bin>pg_upgrade.exe -b D:\AnalyzeMaster\pgsql_64\bin -B f:\DataBase\pgSQL\bin -d D:\AnalyzeMaster\pgsql_64\data\agdata -D f:\DataBase\data -k -c
正在执行一致性检查
-----------------------------
Checking cluster versions
fe_sendauth: no password supplied
这是一个最常见文问题。
F:\DataBase\pgSQL\bin>pg_upgrade.exe -b D:\Master\pgsql_64\bin -B f:\DataBase\pgSQL\bin -d D:\Master\pgsql_64\data\agdata -D f:\DataBase\data -k -c
正在执行一致性检查
-----------------------------
Checking cluster versions ok
连接到数据库失败: fe_sendauth: no password supplied
... ...
问题原因:
解决办法:修改原数据库(9.6)中 pg_hba.config 文件配置,具体修改内容如下:
- 文件路径: 原数据库数据目录
- 如下图: 蓝色方框为原有设置,我们进行注释,后买你红色框为添加。
lc_collate不匹配
F:\DataBase\pgSQL\bin>pg_upgrade.exe -b D:\Master\pgsql_64\bin -B f:\DataBase\pgSQL\bin -d D:\Master\pgsql_64\data\agdata -D f:\DataBase\data -k -c
正在执行一致性检查
-----------------------------
Checking cluster versions ok
Checking database user is the install user ok
Checking database connection settings ok
Checking for prepared transactions ok
Checking for reg* data types in user tables ok
Checking for contrib/isn with bigint-passing mismatch ok
Checking for tables WITH OIDS ok
Checking for invalid "sql_identifier" user columns ok
Checking for invalid "unknown" user columns ok
Checking for hash indexes ok
数据库"postgres"的lc_collate不匹配: 旧的 "C", 新的 "en_US.UTF-8"
故障,退出
原因,这是旧数据的设置选项和新的数据库的 lc_collate不一致,这个是在 initdb 时设置的,旧的我们不能修改,新的我们重新设置。
这里,我们新的服务未启动,直接删除 f:\DataBase\data 下的所有数据,然后再次执行:
F:\DataBase\pgSQL\bin>initdb -E UTF8 -D f:\DataBase\data -U postgres -W --locale=C
属于此数据库系统的文件宿主为用户 "postgres".
此用户也必须为服务器进程的宿主.
数据库簇将使用本地化语言 "C"进行初始化.
缺省的文本搜索配置将会被设置到"english"
禁止为数据页生成校验和.
... ...
新安装中缺少的可加载库
... ...
Checking for invalid "sql_identifier" user columns ok
Checking for invalid "unknown" user columns ok
Checking for hash indexes ok
Checking for presence of required libraries 致命的
您的安装引用了新安装中缺少的可加载库。
您可以将这些库添加到新安装中,或者从旧安装中删除使用它们的函数。
文件中有问题库列表:
loadable_libraries.txt
我们打开新数据库 bin 目录,查看该文件内容:
我的打开是如下内容:
无法加载库 "MyFileExtension": ERROR: could not access file "MyFileExtension": No such file or directory
In database: fs6600
这是旧库中一些自定义共享对象文件(或者 DLL),需要拷贝到新库中,所以我需要把原数据库 lib 中的 MyFileExtension 拷贝到新目录下的 f:\DataBase\data\lib 中。