[英]Postgres - FATAL: database files are incompatible with server
After restarting my MacBook Pro I am unable to start the database server:重新启动 MacBook Pro 后,我无法启动数据库服务器:
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
I checked the logs and the following line appears over and over again:我检查了日志,并一遍又一遍地出现以下行:
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.0.4.
9.0.4 was the version that came preinstalled on the mac, 9.2[.4] is the version I installed via Homebrew. 9.0.4 是预装在 mac 上的版本,9.2[.4] 是我通过 Homebrew 安装的版本。
As mentioned, this used to work before the restart, so it can't actually be a compiling issue.如前所述,这曾经在重新启动之前工作,因此它实际上不是编译问题。 I also re-ran
initdb /usr/local/var/postgres -E utf8
and the file still exists.我还重新运行了
initdb /usr/local/var/postgres -E utf8
并且该文件仍然存在。
If you recently upgraded postgres to latest version, you can run the below command to upgrade your postgres data directory retaining all data:如果您最近将 postgres升级到最新版本,您可以运行以下命令来升级您的 postgres 数据目录,保留所有数据:
brew postgresql-upgrade-database
The above command is taken from the output of brew info postgres
上面的命令取自
brew info postgres
的输出
If you are looking for the nuclear option (delete all data and get a fresh database), you can do:如果您正在寻找核选项(删除所有数据并获取新数据库),您可以执行以下操作:
rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8
and then you'll need to rake db:setup
and rake db:migrate
from your Rails app to get setup again.然后你需要
rake db:setup
和rake db:migrate
从 Rails 应用程序重新设置。
Try this : https://gist.github.com/joho/3735740试试这个: https ://gist.github.com/joho/3735740
It worked perfectly for me.它对我来说非常有效。 In the end it also generates you 2 bash scripts to check your DB and remove the old cluster.
最后,它还会为您生成 2 个 bash 脚本来检查您的数据库并删除旧集群。 Really Awesome.
非常棒。
see: http://www.postgresql.org/docs/9.2/static/pgupgrade.html to understand more.请参阅: http ://www.postgresql.org/docs/9.2/static/pgupgrade.html 以了解更多信息。
Found on internet, this solution work fine for me.在互联网上找到,这个解决方案对我来说很好。
When I tried to start postgresql server after upgrade to OS X 10.10 Yosemite, I encountered with a next problem:当我在升级到 OS X 10.10 Yosemite 后尝试启动 postgresql 服务器时,遇到了下一个问题:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
Okay, lets take a look into server logs:好的,让我们看一下服务器日志:
cat /usr/local/var/postgres/server.log
FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.2, which is not compatible with this version 9.3.5.
So, we need to follow a few steps after upgrade postgresql:因此,我们需要在升级 postgresql 后遵循几个步骤:
launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
mv /usr/local/var/postgres /usr/local/var/postgres92
brew update
brew upgrade postgresql
initdb /usr/local/var/postgres -E utf8
pg_upgrade -b /usr/local/Cellar/postgresql/9.2.3/bin -B /usr/local/Cellar/postgresql/9.3.5_1/bin -d /usr/local/var/postgres92 -D /usr/local/var/postgres
cp /usr/local/Cellar/postgresql/9.3.5_1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
rm -rf /usr/local/var/postgres92
That's it.而已。
If you want to keep the previous version of postgres, use brew switch
:如果要保留以前版本的 postgres,请使用
brew switch
:
$ brew info postgresql
postgresql: stable 10.5 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
Conflicts with:
postgres-xc (because postgresql and postgres-xc install the same binaries.)
/usr/local/Cellar/postgresql/9.6.3 (3,259 files, 36.6MB)
Poured from bottle on 2017-07-09 at 22:15:41
/usr/local/Cellar/postgresql/10.5 (1,705 files, 20.8MB) *
Poured from bottle on 2018-11-04 at 15:13:13
$ brew switch postgresql 9.6.3
$ brew services stop postgresql
$ brew services start postgresql
Otherwise, consider this brew command to migrate existing data: brew postgresql-upgrade-database
.否则,请考虑使用此 brew 命令迁移现有数据:
brew postgresql-upgrade-database
。 Check out the source code .查看源代码。
As @Gowtham mentioned, you can solve this problem by executing a brew command正如@Gowtham 提到的,您可以通过执行 brew 命令来解决此问题
brew postgresql-upgrade-database
The above command is taken from the output of brew info postgres
brew postgresql-upgrade-database
上面的命令取自brew info postgres
的输出
However, don't forget to stop the postgres service before executing it, use the following command: `brew services stop postgresql但是,不要忘记在执行 postgres 服务之前停止它,使用以下命令:`brew services stop postgresql
you may have to start the service again.您可能需要重新启动该服务。
So the final order of commands are:所以命令的最终顺序是:
brew services stop postgresql
brew postgresql-upgrade-database
brew services start postgresql
Similar to these answers ( 1 , 2 ), my Postgres database files were incompatible to my Postgres version after upgrading to postgresql 13.3
.与这些答案( 1 、 2 )类似,我的 Postgres 数据库文件在升级到
postgresql 13.3
后与我的 Postgres 版本不兼容。
Unfortunately, upgrading my Postgres data directory failed.不幸的是,升级我的 Postgres 数据目录失败了。
$ brew postgresql-upgrade-database
...
Setting next OID for new cluster
*failure*
Consult the last few lines of "pg_upgrade_utility.log" for
the probable cause of the failure.
Failure, exiting
Error: Upgrading postgresql data from 12 to 13 failed!
==> Removing empty postgresql initdb database...
==> Moving postgresql data back from /usr/local/var/postgres.old to /usr/local/var/postgres...
Error: Failure while executing; `/usr/local/opt/postgresql/bin/pg_upgrade -r -b /usr/local/Cellar/postgresql@12/12.7/bin -B /usr/local/opt/postgresql/bin -d /usr/local/var/postgres.old -D /usr/local/var/postgres -j 8` exited with 1.
My workaround for this was to reinstall postgresql 12.7
.我的解决方法是重新安装
postgresql 12.7
。
$ brew reinstall postgresql@12
$ brew services start postgresql@12
It happened for me when I was trying to start Postgres12 with postgres11 mounted volume.当我尝试使用 postgres11 安装卷启动 Postgres12 时,它发生在我身上。 Just deleting the mounted volume for postgres11 and restart worked for me.
只需删除 postgres11 的已安装卷并重新启动对我有用。
Previously I was using:以前我使用的是:
docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:11
I deleted /Users/champ/postgres and restarted postgres 12, using我删除 /Users/champ/postgres 并重新启动 postgres 12,使用
docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12
brew info postgres
will give you hints Like To migrate existing data from a previous major version of PostgreSQL run:
brew info postgres
会给你一些提示,比如To migrate existing data from a previous major version of PostgreSQL run:
So in my case removing the old one rm -rf /usr/local/var/postgres.old
and upgrading the DB brew postgresql-upgrade-database
因此,在我的情况下,删除旧的
rm -rf /usr/local/var/postgres.old
并升级数据库brew postgresql-upgrade-database
This can also occur when running a new Postgres in Docker, and your old volume isn't updated.在 Docker 中运行新的 Postgres 并且您的旧卷未更新时也会发生这种情况。
If you don't need to keep your data easiest is to clear the old volumes in the docker folder, in Linux that's here:如果您不需要保持数据最简单,请清除 docker 文件夹中的旧卷,在 Linux 中,此处为:
/var/lib/docker/volumes
A stale postmaster.pid
file caused this for me.一个陈旧的
postmaster.pid
文件对我造成了这种影响。
Simply navigate to your postgres directory /Users/st/Library/Application Support/Postgres/
, for me, that's:只需导航到您的 postgres 目录
/Users/st/Library/Application Support/Postgres/
,对我来说,就是:
cd '/Users/<username>/Library/Application Support/Postgres/var-10'
Then delete the file postmaster.pid
.然后删除文件
postmaster.pid
。 Restart postgres and it will work.重新启动postgres,它会工作。
To me works with this command:对我来说,使用这个命令:
brew install --build-from-source postgresql@12
Then started Postgres:然后启动 Postgres:
brew services start postgresql@12
You can also check the port 5432 is listen:您还可以检查端口5432是否正在侦听:
netstat -nl |grep 5432
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.