【问题标题】:Postgres is failing with 'could not open relation mapping file "global/pg_filenode.map" 'Postgres 因“无法打开关系映射文件“global/pg_filenode.map”而失败
【发布时间】:2024-01-05 15:07:01
【问题描述】:

我在开发环境中安装 postgres 时遇到问题,我需要一些帮助来诊断它。我还没有找到解决方案。

  1. 我用自制软件安装了 postgres 9.0.4
  2. 我在 OS X 10.6.8 (Snow Leopard) 上运行

我可以启动和停止服务器

$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting

如果我试图停下来

$ pg_ctl -D /usr/local/var/postgres stop -s -m fast
pg_ctl: PID file "/usr/local/var/postgres/postmaster.pid" does not exist
Is server running?

好的,这个不见了

$ ls -l /usr/local/var/postgres/ | grep postmaster
$

但它肯定在运行

$ ps aux | grep postgres
pschmitz   303   0.9  0.0  2445860   1428   ??  Ss    3:12PM   0:02.46 postgres: autovacuum launcher process       
pschmitz   304   0.9  0.0  2441760    428   ??  Ss    3:12PM   0:02.57 postgres: stats collector process       
pschmitz   302   0.0  0.0  2445728    508   ??  Ss    3:12PM   0:00.56 postgres: wal writer process       
pschmitz   301   0.0  0.0  2445728    560   ??  Ss    3:12PM   0:00.78 postgres: writer process       
pschmitz   227   0.0  0.1  2445728   2432   ??  S     3:11PM   0:00.42 /usr/local/Cellar/postgresql/9.0.3/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

如果我尝试访问或使用它,我会得到这个。

$psql
psql: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

但是 global/pg_filenode.map 肯定存在于

$ls -l /usr/local/var/postgres/

...
-rw-------  1 pschmitz  staff   8192 Sep 16 15:48 pg_control
-rw-------  1 pschmitz  staff    512 Sep 16 15:48 pg_filenode.map
-rw-------  1 pschmitz  staff  12092 Sep 16 15:48 pg_internal.init

我已尝试卸载并重新安装,但没有效果。关于如何解决这个问题的任何想法? 它几乎使我今天无法完成任何事情。

【问题讨论】:

  • 您的日志文件 (/usr/local/var/postgres/server.log) 对此有什么有用的说明吗?
  • 如果可能的话,查看 /usr/local/var/postgres/ 的全部内容可能会很有用。
  • 恕我直言,目录 /usr/local/var 应该归 postgres.postgres 所有。由于缺少访问权限,Postgres 无法找到它们。
  • 日志文件不是特别有用。
  • “psql -h localhost mydbname”有效吗?

标签: macos homebrew postgresql


【解决方案1】:

我不确定 9.0.3 最初问题的根源是什么,因为我遇到了这个问题:

psql: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

但是,如上所述,运行过程是针对我之前安装的 9.0.3 的 postgres 进行的

我相信我在 ~/Library/LaunchAgents/ 中有一个旧版本的 org.postgresql.postgres.plist

我不得不:

  1. 删除并重新添加启动代理
  2. 终止 9.0.3 的进程
  3. 初始化数据库initdb /usr/local/var/postgres
  4. 重启我的电脑

现在我已经启动并开始工作了。

【讨论】:

  • 这也对我有用。虽然我不需要做第一步。
【解决方案2】:

使用mdillon/postgis:9.6 Docker 镜像时遇到了这个问题。简单的sudo docker restart <container id> 解决了这个问题。

【讨论】:

  • 哇,什么都试过了。我已经删除了数据文件,并插入了一个备份。重新启动容器(并因此重新启动进程)就成功了!
【解决方案3】:

这可能是权限问题,检查/var/lib/pgsql/9.3/data/中配置文件的所有者和组

chown -R postgres:postgres /var/lib/pgsql/9.3/data/

【讨论】:

    【解决方案4】:

    我刚遇到这个问题。通过将 postgres 数据目录的所有者设置为非特权 postgres 用户来解决它。

    【讨论】:

    • 我使用sudo chown -R postgres /usr/local/var/postgres 来做到这一点
    【解决方案5】:

    ps aux | grep postgres 透露我在之前的测试运行的临时数据目录上运行了另一个 postgres 实例。杀死这个进程解决了这个问题。

    【讨论】:

      【解决方案6】:

      我在 Fedora 中的分步解决方案:

      • /bin/systemctl stop postgresql.service(停止服务)
      • rm -rf /var/lib/pgsql/data(删除“数据”目录)
      • postgresql-setup initdb(重新创建“数据”目录)
      • /bin/systemctl start postgresql.service(启动服务)

      检查“数据”目录的权限也很有用:

      chown -R postgres:postgres <path_to_data_dir>

      (感谢@LuizFernandodaSilva 和@user4640867

      【讨论】:

        【解决方案7】:

        我有一个旧值 PGDATA 令人困惑。

        【讨论】:

          【解决方案8】:

          这(https://gist.github.com/olivierlacan/e1bf5c34bc9f82e06bc0)解决了我的问题!我首先必须:

          1. 从我的应用程序中删除 Postgres.app
          2. 删除 /usr/local/var/postgres 目录
          3. initdb /usr/local/var/postgres/

          然后我可以使用以下 2 个命令启动/停止 Postgres:

          开始:

          pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
          

          停止:

          pg_ctl -D /usr/local/var/postgres stop -s -m fast
          

          【讨论】:

            【解决方案9】:

            我对这个问题的解决方案:
            我正在运行 postgresql-9.3

            我的 plist 文件在以下目录:/Library/LaunchDaemons/com.edb.launchd.postgresql-9.3.plist

            第 1 步将停止 postgres
            1. $ sudo launchctl stop com.edb.launchd.postgresql-9.3
            使用以下命令启动 postgres(可以使用 $ brew info postgres 找到此位置)
            2. $ postgres -D /usr/local/var/postgres

            【讨论】:

              【解决方案10】:

              我同意上述所有解决方案。我在服务器上运行 Postgres,问题是我使用的 PORT 号被其他一些旧版本的 Postgres 使用。

              我只需要更改端口。

              【讨论】:

                【解决方案11】:

                我遇到了同样的错误psql: FATAL: could not open relation mapping file "global/pg_filenode.map": No such file or directory

                感谢上面的注释 #2:'Kill the processes for 9.0.3'

                我之前配置和编译过 PostgreSQL。然后我决定用不同的文件路径重新配置、gmake、gmake install。新编译的程序在预期的文件路径中没有找到“pg_filenode.map”。杀死正在运行的 postgres 进程,清空 pgsql/data 并再次执行 initdb 允许创建新数据库。

                【讨论】:

                  【解决方案12】:

                  确保关闭您的防病毒软件。 就我而言,当我关闭防病毒软件(卡巴斯基)时,它运行良好 参考:https://github.com/PostgresApp/PostgresApp/issues/610

                  【讨论】:

                    最近更新 更多