如何在 NixOS 中升级 postgresql?
How to upgrade postgresql in NixOS?
我正尝试在我的 NixOS 机器上将我的 postgresql 服务器从 9.4 更新到(至少)9.6。
我在 configuration.nix
中编辑了 services.postgres.package
以反映此更改,将其更改为:
services.postgresql.package = pkgs.postgresql94
至
services.postgresql.package = pkgs.postgresql96
然而,这会在 运行 nixos-rebuild switch
时导致错误,即:
$ sudo nixos-rebuild switch
building Nix...
building the system configuration...
stopping the following units: postgresql.service
NOT restarting the following changed units: display-manager.service
activating the configuration...
setting up /etc...
setting up tmpfiles
reloading the following units: dbus.service
restarting the following units: polkit.service
starting the following units: postgresql.service
Job for postgresql.service failed because the control process exited with error code.
See "systemctl status postgresql.service" and "journalctl -xe" for details.
warning: the following units failed: postgresql.service
● postgresql.service - PostgreSQL Server
Loaded: loaded (/nix/store/bh7vzvacc9y56w0kzs1mwgb1jy9bwvf6-unit-postgresql.service/postgresql.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2018-08-04 17:39:33 UTC; 26ms ago
Process: 25399 ExecStartPost=/nix/store/hj8lfb9bbspn76nwm0qmx0xr4466gh0a-unit-script/bin/postgresql-post-start (code=exited, status=1/FAILURE)
Process: 25398 ExecStart=/nix/store/qhdnk3qsw00igzadqfxf7kpp3a48z368-unit-script/bin/postgresql-start (code=exited, status=1/FAILURE)
Process: 25395 ExecStartPre=/nix/store/qg6s6mph3jmrsgr67vh4bsydxrrbmvrr-unit-script/bin/postgresql-pre-start (code=exited, status=0/SUCCESS)
Main PID: 25398 (code=exited, status=1/FAILURE)
Aug 04 17:39:33 nixos systemd[1]: Starting PostgreSQL Server...
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Main process exited, code=exited, status=1/FAILURE
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Control process exited, code=exited status=1
Aug 04 17:39:33 nixos systemd[1]: Failed to start PostgreSQL Server.
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Unit entered failed state.
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Failed with result 'exit-code'.
warning: error(s) occurred while switching to the new configuration
我注意到 NixOS 手册包含 PostgreSQL section,但是 "Upgrading" 小节尚未填写。关于如何解决此错误并升级我的 PostgreSQL 有什么想法吗?
我通过创建所有服务器数据库的转储解决了这个问题,重击旧 data_directory 并卸载旧版本,安装新版本,然后从转储中恢复。
下面详细描述了这些步骤。
创建所有服务器数据库的转储。
$ pg_dumpall -U root > sql-dump
确定当前版本的 data_directory
.
的位置
root=# SHOW data_directory;
data_directory
--------------------
/var/db/postgresql
(1 row)
更改 /etc/nixos/configuration.nix
中 services.postgresql.package
的版本。
services.postgresql.package = pkgs.postgresql100
根据 $ nix-env -qaP '*' --description
,这显然是版本 10.4 的表达式。
接下来为当前版本重击data_directory
。
$ sudo rm -rf /var/db/postgresql/
并切换到configuration.nix
中标记的新版本
$ sudo nixos-rebuild switch
我必须创建一个 root
数据库。
$ sudo createdb root
(我还必须在 sql-dump
文件中将 postgres
的某些实例更改为 root
。)
将数据恢复到新版本。
$ psql -U root -f sql-dump
有人知道如何为 nixos manual 做贡献吗?
我很高兴用我在这里学到的东西来写 updating postgres section.
我正尝试在我的 NixOS 机器上将我的 postgresql 服务器从 9.4 更新到(至少)9.6。
我在 configuration.nix
中编辑了 services.postgres.package
以反映此更改,将其更改为:
services.postgresql.package = pkgs.postgresql94
至
services.postgresql.package = pkgs.postgresql96
然而,这会在 运行 nixos-rebuild switch
时导致错误,即:
$ sudo nixos-rebuild switch
building Nix...
building the system configuration...
stopping the following units: postgresql.service
NOT restarting the following changed units: display-manager.service
activating the configuration...
setting up /etc...
setting up tmpfiles
reloading the following units: dbus.service
restarting the following units: polkit.service
starting the following units: postgresql.service
Job for postgresql.service failed because the control process exited with error code.
See "systemctl status postgresql.service" and "journalctl -xe" for details.
warning: the following units failed: postgresql.service
● postgresql.service - PostgreSQL Server
Loaded: loaded (/nix/store/bh7vzvacc9y56w0kzs1mwgb1jy9bwvf6-unit-postgresql.service/postgresql.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2018-08-04 17:39:33 UTC; 26ms ago
Process: 25399 ExecStartPost=/nix/store/hj8lfb9bbspn76nwm0qmx0xr4466gh0a-unit-script/bin/postgresql-post-start (code=exited, status=1/FAILURE)
Process: 25398 ExecStart=/nix/store/qhdnk3qsw00igzadqfxf7kpp3a48z368-unit-script/bin/postgresql-start (code=exited, status=1/FAILURE)
Process: 25395 ExecStartPre=/nix/store/qg6s6mph3jmrsgr67vh4bsydxrrbmvrr-unit-script/bin/postgresql-pre-start (code=exited, status=0/SUCCESS)
Main PID: 25398 (code=exited, status=1/FAILURE)
Aug 04 17:39:33 nixos systemd[1]: Starting PostgreSQL Server...
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Main process exited, code=exited, status=1/FAILURE
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Control process exited, code=exited status=1
Aug 04 17:39:33 nixos systemd[1]: Failed to start PostgreSQL Server.
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Unit entered failed state.
Aug 04 17:39:33 nixos systemd[1]: postgresql.service: Failed with result 'exit-code'.
warning: error(s) occurred while switching to the new configuration
我注意到 NixOS 手册包含 PostgreSQL section,但是 "Upgrading" 小节尚未填写。关于如何解决此错误并升级我的 PostgreSQL 有什么想法吗?
我通过创建所有服务器数据库的转储解决了这个问题,重击旧 data_directory 并卸载旧版本,安装新版本,然后从转储中恢复。 下面详细描述了这些步骤。
创建所有服务器数据库的转储。
$ pg_dumpall -U root > sql-dump
确定当前版本的 data_directory
.
root=# SHOW data_directory;
data_directory
--------------------
/var/db/postgresql
(1 row)
更改 /etc/nixos/configuration.nix
中 services.postgresql.package
的版本。
services.postgresql.package = pkgs.postgresql100
根据 $ nix-env -qaP '*' --description
,这显然是版本 10.4 的表达式。
接下来为当前版本重击data_directory
。
$ sudo rm -rf /var/db/postgresql/
并切换到configuration.nix
$ sudo nixos-rebuild switch
我必须创建一个 root
数据库。
$ sudo createdb root
(我还必须在 sql-dump
文件中将 postgres
的某些实例更改为 root
。)
将数据恢复到新版本。
$ psql -U root -f sql-dump
有人知道如何为 nixos manual 做贡献吗? 我很高兴用我在这里学到的东西来写 updating postgres section.