每当我通过postgres用户运行以下命令时,我都会一直收到上述错误.
/usr/lib/postgresql/9.3/bin/pg_upgrade \
-b /usr/lib/postgresql/9.1/bin/ \
-B /usr/lib/postgresql/9.3/bin/ \
-d /var/lib/postgresql/9.1/main \
-D /var/lib/postgresql/9.3/main
Run Code Online (Sandbox Code Playgroud)
无法写入日志文件pg_upgrade_internal.log失败,退出
我正在使用Ubuntu 13.10.Postgresql 9.1和9.3都正常运行.
我需要一些帮助,我正在 Windows 上将 postgresql 从 v10 升级到 v11,但收到以下错误消息:could not open version file: C:/Program Files/PostgresSQL/11/data/PG_VERSION.
以下是采取的步骤:
使用以下命令停止了 PostgresSQL v10 和 PostgresSQL v11 服务
services.msc
Run Code Online (Sandbox Code Playgroud)为 v10 和 v11 的用户设置完全访问控制/完全权限。
打开命令行并输入
RUNAS /USER:postgres "CMD.EXE
Run Code Online (Sandbox Code Playgroud)
提示输入用户 postgres 用户的密码。
新的命令行窗口打开并 cd 到“C:\Program Files\PostgreSQL\11”。
services.msc
Run Code Online (Sandbox Code Playgroud)
按回车时,我收到上述错误。
我对使用 PostgreSQL 的整个过程很陌生。
关于什么是错误的任何想法?
我正在尝试在Windows 2008R2上运行pg_upgrade,但我收到错误:
无法写入日志文件pg_upgrade_internal.log失败,退出
我在23216734上看到了Linux的类似问题,它解释了问题是权限,但它没有帮助Windows,因为我没有用户命名postgres
同样适用于提及用户的pg_upgrade文档postgres:
RUNAS/USER:postgres"CMD.EXE"
但同样,我没有这样的用户,我试图以管理员身份运行此命令,所以我不明白为什么我没有权限.我甚至试图这样做
RUNAS /USER:Administrator "CMD.EXE"
Run Code Online (Sandbox Code Playgroud)
并在新的命令提示符下运行pg_upgrade,但我得到相同的错误.
另外,我不确定哪个目录需要权限?尝试写入的过程在哪里pg_upgrade_internal.log?
更多细节:
我正在运行的命令是:
C:\Apps\postgresql\pgsql-9.5.0\bin>pg_upgrade.exe --old-datadir=E:\PGSQL_data --new-datadir=E:\PGSQLData\pgsql-9.5 --old-bindir=C:\Apps\postgresql\pgsql-9.4.5.3\bin --new-bindir=C:\Apps\postgresql\pgsql-9.5.0\bin
Run Code Online (Sandbox Code Playgroud)
在给出错误的同一命令提示符下,我运行了以下命令并且它们都工作,在相应的目录中创建一个空文件,因此允许对传递给pg_upgrade的目录的写权限:
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > E:\PGSQL_data\_test_write_permission.txt
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > E:\PGSQLData\pgsql-9.5\_test_write_permission.txt
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > C:\Apps\postgresql\pgsql-9.4.5.3\bin\_test_write_permission.txt
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > C:\Apps\postgresql\pgsql-9.5.0\bin\_test_write_permission.txt
Run Code Online (Sandbox Code Playgroud)
所以现在我比以前更困惑......
更多细节:
我看到创建内部日志文件的命令位于/src/bin/pg_upgrade/option.c#L101
fopen_priv(INTERNAL_LOG_FILE, "a")在/src/bin/pg_upgrade/file.c#L243中定义了
哪些调用
但我不确定它正在尝试编写哪个目录.如果我知道那么我可以检查该目录的权限.
有任何想法吗?
我打算将一个很大的PostgreSQL集群从9.3升级到11。
升级
该集群的大小约为1,2Tb。该数据库具有一个磁盘系统,该磁盘系统由8个具有192GB内存和64个内核的DC版本SSD的快速HW RAID 10阵列组成。我通过先将数据复制到具有流复制的新服务器来执行升级,然后将其升级到11。
我使用pg_upgrade该--link选项测试了升级,这花费了不到一分钟的时间。我还定期(没有--link)对许多工作进行了升级测试,这需要几个小时(+4)。
问题
现在,显而易见的选择让我使用了该--link选项,但是,所有这些使我感到奇怪-与常规的较慢方法相比,使用该选项是否有任何不利之处(在性能或功能方面)?我不知道postgresql数据结构的内部工作原理,但是我觉得升级后完全重写数据和仅使用数据之间可能会有性能差异hard links-意味着什么?
注意事项
我可以大概的缺点的文档中找到的唯一的事情--link就是升级完成之后不能够访问旧数据目录的缺点https://www.postgresql.org/docs/11/pgupgrade.htm但是,这种只是出于安全考虑,而不是性能缺陷,并且在我首先复制数据的情况下并没有真正应用。我能想到的唯一的另一件事就是回收空间,无论性能如何。但是,据我了解,还可以通过在升级升级的数据库之后运行VACUUM FULL DATABASE(或CLUSTER?)命令来实现--link?另外,据我了解,回收空间对SSD的性能并不是很重要。
我很高兴有人能对此有所帮助。
我正在尝试将 postgres-9.3 升级到 postgres-10,数据库大小约为 165GB。我正在使用“sudo pg_upgradecluster 9.3 main”来执行此操作,但需要大约 8 小时,这对于我的实时 Web 应用程序来说停机时间太多了。有任何建议可以让它变得更好、更少的停机时间和更快的速度。