Postgres - 致命:数据库文件与服务器不兼容

时间:2013-07-23 23:57:05

标签: macos postgresql homebrew

重新启动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"?

我检查了日志,一遍又一遍地出现以下行:

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是预装在mac上的版本,9.2 [.4]是我通过Homebrew安装的版本。 如前所述,这曾经在重启之前工作,所以它实际上不是一个编译问题。我也重新运行了initdb /usr/local/var/postgres -E utf8,文件仍然存在。

不幸的是,我对Postgres很新,所以任何帮助都会非常感激。

11 个答案:

答案 0 :(得分:146)

如果您正在寻找核选项(删除所有数据并获得新数据库),您可以这样做:

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

然后您需要从Rails应用中rake db:setuprake db:migrate再次进行设置。

答案 1 :(得分:91)

如果您使用的是Mac,并且最近从10.x升级到11,则可以运行以下命令来升级保留所有数据的postgres数据目录:

brew postgresql-upgrade-database

以上命令取自brew info postgres的输出

答案 2 :(得分:38)

试试这个: https://gist.github.com/joho/3735740

它对我来说很完美。 最后,它还会生成2个bash脚本来检查您的数据库并删除旧的群集。 真棒。

请参阅:http://www.postgresql.org/docs/9.2/static/pgupgrade.html了解更多信息。

答案 3 :(得分:8)

在互联网上找到,这个解决方案对我来说很好。

当我在升级到OS X 10.10 Yosemite后尝试启动postgresql服务器时,我遇到了下一个问题:

$getUser = User::where('firstName', 'like', '%' . $search . '%') ->orWhere('lastName', 'like', '%' . $search . '%') ->select('firstName','lastName') ->get();

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"?

cat /usr/local/var/postgres/server.log

因此,我们需要在升级postgresql后执行几个步骤:

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.

就是这样。

答案 4 :(得分:3)

如果要保留以前版本的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

否则,请考虑以下brew命令以迁移现有数据:brew postgresql-upgrade-database。检出the source code

答案 5 :(得分:2)

类似于这些答案(12),我的 Postgres 数据库文件在升级到 postgresql 13.3 后与我的 Postgres 版本不兼容。

不幸的是,升级我的 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.

我的解决方法是重新安装 postgresql 12.7

$ brew reinstall postgresql@12
$ brew services start postgresql@12

答案 6 :(得分:1)

在 Docker 中运行新的 Postgres 并且您的旧卷未更新时也会发生这种情况。

如果您不需要保留数据,最简单的方法是清除 docker 文件夹中的旧卷,在 Linux 中,这里是:

/var/lib/docker/volumes

答案 7 :(得分:0)

当我尝试使用postgres11挂载的卷启动Postgres12时,发生了这件事。只是删除postgres11的已安装卷并重新启动对我来说是有效的。

以前我在使用:

docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:11

我使用

删除了/ Users / champ / postgres并重新启动了postgres 12。
docker run -d --name my_database -v /Users/champ/postgres:/var/lib/postgresql/data -p 54320:5432 postgres:12

答案 8 :(得分:0)

brew info postgres会给您类似To migrate existing data from a previous major version of PostgreSQL run:

的提示

因此,在我的情况下,删除旧的rm -rf /usr/local/var/postgres.old并升级数据库brew postgresql-upgrade-database

答案 9 :(得分:0)

一个陈旧的 postmaster.pid 文件导致我出现这种情况。

只需导航到您的 postgres 目录 /Users/st/Library/Application Support/Postgres/,对我来说,就是:

cd '/Users/<username>/Library/Application Support/Postgres/var-10'

然后删除文件postmaster.pid。重启 postgres 就可以了。

答案 10 :(得分:-1)

对我来说使用这个命令:

brew install --build-from-source postgresql@12

然后启动 Postgres:

brew services start postgresql@12

您还可以检查端口 5432 是否正在侦听:

netstat -nl |grep 5432