Postgres失败了'无法打开关系映射文件'global / pg_filenode.map“'

时间:2011-09-16 14:06:51

标签: macos homebrew postgresql

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

  1. 我使用自制软件安装了postgres 9.0.4
  2. 我在OS X 10.6.8(Snow Leopard)上运行
  3. 我可以启动和停止服务器

    $ 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
    

    我试图卸载并重新安装无效。关于如何解决这个问题的任何想法? 它几乎阻止我今天做任何事情。

    编辑已解决

    我不确定我原来问题的根源是什么,因为我遇到了这个问题

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

    然而,如上所述,结果表明正在运行的过程是我以前的postgres安装9.0.3

    我相信我在〜/ Library / LaunchAgents /

    中有一个旧版org.postgresql.postgres.plist

    我必须:

    1. 删除并重新添加启动代理
    2. 终止9.0.3
    3. 的流程
    4. 初始化数据库initdb /usr/local/var/postgres
    5. 重新启动计算机
    6. 现在我把它搞定了。

11 个答案:

答案 0 :(得分:29)

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

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

但是如上所述,运行过程是我以前的postgres安装9.0.3

我相信我在〜/ Library / LaunchAgents /

中有一个旧版org.postgresql.postgres.plist

我必须:

  1. 删除并重新添加启动代理
  2. 终止9.0.3
  3. 的流程
  4. 初始化数据库initdb /usr/local/var/postgres
  5. 重新启动计算机
  6. 现在我把它搞定了。

答案 1 :(得分:7)

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

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

为我解决了这个问题

答案 2 :(得分:5)

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

答案 3 :(得分:4)

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

我在fedora中的逐步解决方案:

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

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

chown -R postgres:postgres <path_to_data_dir>

(感谢@LuizFernandodaSilva&amp; @user4640867

答案 6 :(得分:2)

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

  1. 从我的应用程序中删除Postgres.app
  2. 删除/ usr / local / var / postgres目录
  3. initdb /usr/local/var/postgres/
  4. 然后我能用这两个命令开始/停止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
    

答案 7 :(得分:1)

我解决这个问题的方法:
我正在运行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

答案 8 :(得分:1)

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

我只需要更改端口。

答案 9 :(得分:1)

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

感谢上面的注释#2:'杀死9.0.3的进程'

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

答案 10 :(得分:1)

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