如何将PostgreSQL从版本9.5升级到版本9.6而不丢失数据?

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

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

恐怕我会销毁数据库中的数据或弄乱它。

假设您已经使用home-brew来安装和升级Postgres,您可以执行以下步骤。

  1. 停止当前的Postgres服务器:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. 初始化一个新的9.6数据库:

    initdb /usr/local/var/postgres9.6 -E utf8

  3. 运行pg_upgrade

     pg_upgrade -v \ -d /usr/local/var/postgres \ -D /usr/local/var/postgres9.6 \ -b /usr/local/Cellar/postgresql/9.5.5/bin/ \ -B /usr/local/Cellar/postgresql/9.6.1/bin/ 
  4. 移动新数据到位:

     cd /usr/local/var mv postgres postgres9.5 mv postgres9.6 postgres 
  5. 重新启动Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  6. 查看/usr/local/var/postgres/server.log了解详细信息,并确保新服务器正常启动。

  7. 最后,重新安装rails pg gem

     gem uninstall pg gem install pg 

我build议你花一些时间阅读PostgreSQL文档,以明确你在做什么,在上面的步骤,以尽量减less挫折。

这里是Ubuntu用户的解决scheme

首先,我们必须停止postgresql

 sudo /etc/init.d/postgresql stop 

创build一个名为/etc/apt/sources.list.d/pgdg.list的新文件并添加下面的行

 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 

尽pipe以上所有答案,这里是我的5美分。

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

  • 停止任何正在运行的postgres实例;
  • 安装新版本并启动它; 检查是否可以连接到新版本;
  • 将旧版本的postgresql.conf – > port5432更改为5433 ;
  • 启动旧版本的postgres实例;
  • 打开terminal和光盘到新版本的bin文件夹;
  • 运行pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username> pg_dumpall -p 5433 -U <username> | psql -p 5432 -U <username>
  • 停止旧的postgres运行实例;

用户手册深入讨论了这个话题。 您可以:

  • pg_upgrade in-place; 要么

  • pg_dumppg_restore

如果有疑问,请用垃圾箱处理。 不要删除旧的数据目录,只要保存它以防万一出错/你犯了一个错误; 这样你可以回到你原来的9.3版本。

有关详细信息,请参阅手册。

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

站在其他可怜的生物的肩膀上,在升级到优胜美地之后,我可以按照以下步骤恢复原状:

假设您已经使用home-brew来安装和升级Postgres,您可以执行以下步骤。

  1. 停止当前的Postgres服务器:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. 初始化一个新的9.4数据库:

    initdb /usr/local/var/postgres9.4 -E utf8

  3. 安装postgres 9.3(因为它已经不在我的机器上):

    brew install homebrew/versions/postgresql93

  4. 添加优胜美地升级期间删除的目录:

    mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep

  5. 运行pg_upgrade

    pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/

  6. 移动新数据到位:

     cd /usr/local/var mv postgres postgres9.3 mv postgres9.4 postgres 
  7. 重新启动Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  8. 查看/usr/local/var/postgres/server.log了解详细信息,并确保新服务器正常启动。

  9. 最后,重新安装相关的库?

     pip install --upgrade psycopg2 gem uninstall pg gem install pg 

更新 :升级9.6到10的过程是一样的。 只需修改命令以反映版本9.610 ,其中9.6版本, 10版本。 一定要相应地调整“旧”和“新”目录。


我刚刚在Ubuntu上升级了PostgreSQL 9.5到9.6,并且认为我会分享我的发现,因为有几个需要了解的OS /软件包的细微差别。

我不想手动转储和恢复数据 ,所以这里的其他几个答案是不可行的。)

简而言之,这个过程包括在旧版本(例如9.5和9.6)的基础上安装新版本的PostgreSQL,然后运行pg_upgrade二进制文件,在https://www.postgresql.org /docs/9.6/static/pgupgrade.html 。

pg_upgrade的唯一“棘手”方面是,如果未能为parameter passing正确的值,或者未能以正确的用户身份login,或者在执行命令之前cd到正确的位置,可能会导致出现隐藏的错误消息。

在Ubuntu(也可能是Debian)上,假设你使用的是“官方”的repo, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main ,假如你没有改变默认的文件系统path或运行时选项,下面的过程应该做的工作。

安装新版本(注意,我们明确指定了9.6 ):

 sudo apt install postgresql-9.6 

安装成功后,两个版本将并行运行,但在不同的端口上运行。 安装输出在底部提到了这一点,但很容易忽略:

 Creating new cluster 9.6/main ... config /etc/postgresql/9.6/main data /var/lib/postgresql/9.6/main locale en_US.UTF-8 socket /var/run/postgresql port 5433 

停止两个服务器实例(这将同时停止):

 sudo systemctl stop postgresql 

切换到专用的PostgreSQL系统用户:

 su postgres 

进入他的主目录(不这样做会导致错误):

 cd ~ 

pg_upgrade 需要下面的input( pg_upgrade --help告诉我们这个):

 When you run pg_upgrade, you must provide the following information: the data directory for the old cluster (-d DATADIR) the data directory for the new cluster (-D DATADIR) the "bin" directory for the old version (-b BINDIR) the "bin" directory for the new version (-B BINDIR) 

这些input可以用“长名称”来指定,以使其更容易可视化:

  -b, --old-bindir=BINDIR old cluster executable directory -B, --new-bindir=BINDIR new cluster executable directory -d, --old-datadir=DATADIR old cluster data directory -D, --new-datadir=DATADIR new cluster data directory 

我们还必须通过--new-options开关,因为不这样做导致以下结果:

 connection to database failed: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"? 

发生这种情况是因为缺less此开关时会应用默认configuration选项,这会导致使用错误的连接选项,从而导致套接字错误。

从新的 PostgreSQL版本执行pg_upgrade命令:

 /usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf 

注销专用系统用户帐户:

 exit 

升级现在已经完成, 但是新实例将绑定到端口5433 (标准默认值是5432 ),因此如果在“切换”之前尝试testing新实例,请牢记这一点。

正常启动服务器(同样,这将启动旧的和新的实例):

 systemctl start postgresql 

如果要将新版本设置为默认版本,则需要编辑有效的configuration文件,例如/etc/postgresql/9.6/main/postgresql.conf ,并确保将端口定义为:

 port = 5432 

如果你这样做的话,或者把老版本的端口号同时更改为5433 (在启动服务之前),或者只是删除旧版本(这不会删除你的实际数据库内容;你需要使用apt --purge remove postgresql-9.5的发生):

 apt remove postgresql-9.5 

以上命令将停止所有实例,因此您需要最后一次启动新实例:

 systemctl start postgresql 

作为最后一点,不要忘记考虑pg_upgrade的好build议:

 Upgrade Complete ---------------- Optimizer statistics are not transferred by pg_upgrade so, once you start the new server, consider running: ./analyze_new_cluster.sh Running this script will delete the old cluster's data files: ./delete_old_cluster.sh 

这是为我做的。

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

简明扼要。 我真的不打算理解PostgreSQL的胆量,我想完成任务。

Windows上,当我尝试使用pg_upgrade时,我一直面对着不同的错误信息。

为我节省了很多时间,只是:

  1. 备份数据库
  2. 卸载PostgreSQL的所有副本
  3. 安装9.5
  4. 还原数据库

我的解决scheme是做这两个资源的组合:

https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d

http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4

第二帮助了第一个。 另外,不要按照步骤,因为有些是没有必要的。 另外,如果你不能通过postgres控制台备份数据,你可以使用替代方法,并使用pgAdmin 3或其他程序进行备份,就像我的情况一样。

此外,链接: https: //help.ubuntu.com/stable/serverguide/postgresql.html帮助设置encryption的密码,并设置md5validationpostgres用户。

毕竟,检查在terminal运行postgres server版本:

 sudo -u postgres psql postgres 

在postgresterminalinput密码后运行:

 SHOW SERVER_VERSION; 

它会输出如下所示的内容:

  server_version ---------------- 9.4.5 

为了设置和启动postgres,我使用了命令:

 > sudo bash # root > su postgres # postgres > /etc/init.d/postgresql start > /etc/init.d/postgresql stop 

然后从文件恢复数据库:

 > psql -f /home/ubuntu_username/Backup_93.sql postgres 

或者如果不行的话试试这个:

 > pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump 

如果你正在使用Rails做一个bundle exec rake db:migrate在拉代码后bundle exec rake db:migrate 🙂

对于通过自制软件的Mac:

brew tap petere/postgresql

brew install <formula> (例如: brew install petere/postgresql/postgresql-9.6

删除旧的postgre:

brew unlink postgresql

brew link -f postgresql-9.6

如果发生任何错误,请不要忘记在每一步中阅读并遵循brew指令。

检查这更多: https : //github.com/petere/homebrew-postgresql

希望这个帮助

我认为这是您的解决scheme最好的链接更新postgres到9.6

 https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/