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

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

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


当前回答

这对我很有用。

https://gist.github.com/dideler/60c9ce184198666e5ab4

言简意赅。老实说,我的目标不是理解PostgreSQL的精髓,我只想把事情做好。

其他回答

看来Homebrew现在已经有了解决方案:

$ brew info postgresql
...
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
  brew postgresql-upgrade-database
....

用户手册详细介绍了这个主题。您可以:

pg_upgrade就地;或 Pg_dump和pg_restore。

如果有疑问,请使用转储。不要删除旧的数据目录,保留下来,以防出现问题/你犯了错误;这样,您就可以返回到未更改的9.3安装。

具体操作请参见产品手册。

如果你被卡住了,发一个详细的问题,解释你是如何被卡住的,在哪里,你首先尝试了什么。这也取决于你如何安装PostgreSQL,因为在OS X上有几个不同的PostgreSQL“发行版”(不幸的是)。所以你需要提供这些信息。

在Windows 10上,因为我有npm,所以我安装了rimraf包。NPM安装rimraf

使用pg_dump -U $username——format=c——file=$mydatabase命令逐个备份所有数据库。美元sqlc dbname

然后安装了最新的PostgreSQL版本,即11.2,这提示我这次使用端口5433。

其次是卸载旧版本的PostgreSQL我是10。注意,卸载程序可能会提示不删除文件夹C:\PostgreSQL\10\data。这就是为什么我们有下一步使用rimraf永久删除文件夹和它的子文件夹。

2 .进入PostgreSQL安装目录,执行命令rimraf 10。10为目录名。注意使用旧版本的PostgreSQL,比如9.5之类的。

现在将C:\PostgreSQL\pg11\bin, C:\PostgreSQL\pg11\lib添加到Windows环境变量中。注意我的新安装版本是11,这就是为什么我使用pg11。

打开C:\PostgreSQL\data\pg11,打开PostgreSQL .conf编辑port = 5433到port = 5432

就是这样。打开cmd,输入psql -U postgres

现在,您可以使用命令pg_restore -U $username——dbname=$databasename $filename来逐个恢复所有已备份的数据库

我在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 "

这对我很有用。

https://gist.github.com/dideler/60c9ce184198666e5ab4

言简意赅。老实说,我的目标不是理解PostgreSQL的精髓,我只想把事情做好。