我正在为我的Ruby on Rails应用程序(在Mac OS X 10.9上)使用PostgreSQL数据库。

关于如何升级PostgreSQL数据库有详细的说明吗?

我担心我会破坏数据库中的数据或把它弄乱。


当前回答

我在Windows 10上从Postgresql 11升级到Postgresql 12的解决方案如下。

首先,你需要能够停止和启动Postgresql服务。您可以在Powershell中通过以下命令完成此操作。

开始: pg_ctl start -D " d:\postgresql\11\data "

站: pg_ctl stop -D " d:\postgresql\11\data "

状态: pg_ctl status -D " d:\postgresql\11\data "

在进行升级之前进行备份是明智的。Postgresql 11实例必须正在运行。然后复制全局函数

pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql

然后是每个数据库

pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc

or

pg_dump -U postgress -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc . d:\backup\postgresql\11\<database>.fc . d:\backup\postgresql\11\

如果还没有安装Postgresql 12 (Postgresql 11也安装在5433端口上)

然后按如下步骤进行升级:

1)停止Postgresql 11服务(见上文)

2)编辑d:\postgresql\12\data目录下的postgresql.conf文件,将port = 5433修改为port = 5432

3)编辑windows用户环境路径(windows start然后输入env)指向Postgresql 12而不是Postresql 11

4)执行upgrade,输入如下命令。

pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres

(在powershell中使用反引号(或反引号)'来继续下一行的命令)

5)最后启动新的Postgresql 12服务

pg_ctl start -D " d:\postgresql\12\data "

其他回答

我在Windows 10上从Postgresql 11升级到Postgresql 12的解决方案如下。

首先,你需要能够停止和启动Postgresql服务。您可以在Powershell中通过以下命令完成此操作。

开始: pg_ctl start -D " d:\postgresql\11\data "

站: pg_ctl stop -D " d:\postgresql\11\data "

状态: pg_ctl status -D " d:\postgresql\11\data "

在进行升级之前进行备份是明智的。Postgresql 11实例必须正在运行。然后复制全局函数

pg_dumpall -U postgres -g -f d:\bakup\postgresql\11\globals.sql

然后是每个数据库

pg_dump -U postgres -Fc <database> > d:\backup\postgresql\11\<database>.fc

or

pg_dump -U postgress -Fc -d <database> -f d:\backup\postgresql\11\<database>.fc . d:\backup\postgresql\11\<database>.fc . d:\backup\postgresql\11\

如果还没有安装Postgresql 12 (Postgresql 11也安装在5433端口上)

然后按如下步骤进行升级:

1)停止Postgresql 11服务(见上文)

2)编辑d:\postgresql\12\data目录下的postgresql.conf文件,将port = 5433修改为port = 5432

3)编辑windows用户环境路径(windows start然后输入env)指向Postgresql 12而不是Postresql 11

4)执行upgrade,输入如下命令。

pg_upgrade `
-b “c:\program files\postgresql\11\bin” `
-B “c:\program files\postgresql\12\bin” `
-d “d:\postgresql\11\data” `
-D “d:\postgresql\12\data” --username=postgres

(在powershell中使用反引号(或反引号)'来继续下一行的命令)

5)最后启动新的Postgresql 12服务

pg_ctl start -D " d:\postgresql\12\data "

如果你正在使用自制和自制服务,你可能只需要做:

brew services stop postgresql
brew upgrade postgresql
brew postgresql-upgrade-database
brew services start postgresql

我认为如果您正在使用高级postgres功能,这可能不完全有效,但它对我来说非常有效。

下面是Ubuntu用户的解决方案

首先,我们必须停止postgresql

sudo /etc/init.d/postgresql stop

创建一个名为/etc/apt/sources.list.d/pgdg的新文件。列出并在行下添加

deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main

遵循以下命令

wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get install postgresql-9.4
sudo pg_dropcluster --stop 9.4 main 
sudo /etc/init.d/postgresql start

现在我们什么都有了,只需要升级如下

sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main

就是这样。大多数升级后的集群将在端口号5433上运行。用下面的命令检查它

sudo pg_lsclusters

尽管上面有所有的答案,我还是有5美分。

它适用于任何操作系统和从任何到任何postgres版本。

停止任何正在运行的postgres实例; 安装新版本并启动它;检查你是否可以连接到新版本; 将旧版本postgresql.conf ->端口从5432修改为5433; 启动旧版postgres实例; 打开终端并cd到新版本的bin文件夹; 执行命令pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username> 停止旧的postgres运行实例;

Mac通过homebrew:

编译petere/postgresql,

(例如:Brew install peere /postgresql/postgresql-9.6)

删除旧Postgres:

Brew unlink postgresql

编译链接-f postgresql-9.6

如果发生任何错误,不要忘记阅读并遵循每一步的酿造说明。

查看更多信息:https://github.com/petere/homebrew-postgresql