自制软件的 data_directory 在哪里?或者对于 postgresql 或者我该如何解决错误,“”global/pg_filenode.map“:没有这样的文件或目录”?

Posted

技术标签:

【中文标题】自制软件的 data_directory 在哪里?或者对于 postgresql 或者我该如何解决错误,“”global/pg_filenode.map“:没有这样的文件或目录”?【英文标题】:Where is data_directory for homebrew? or for postgresql or how do I solve error, ""global/pg_filenode.map": No such file or directory"? 【发布时间】:2014-11-15 04:06:57 【问题描述】:

通过自制软件安装后,我在使用 postgresql 时遇到了困难。我在 Mac OS X 10.9.5 上(今天刚刚更新并重新启动)。

请注意,我并没有故意通过自制软件更改默认 postgresql 安装的任何内容

问题

我无法卸载 postgresql 我无法登录查看表/启动 postgres 的“命令行” createdb 返回有关 pg_filenode.map “没有这样的文件或目录”的错误 initdb 返回错误,想知道 data_directory 在哪里(我不知道)

其中任何一个都会成功

登录到 psql(这样我就可以像在 mysql 中那样创建数据库或表,浏览现有表) 完全卸载 postgres(这样我就可以使用 postgresql.app 重试)

我已经花了将近 10 个小时来解决这个问题,但最终还是失败了。

我已经查看了大量答案(包括 SO 问题 24132418 和 14510237),但由于还没有信誉点,我无法包含所有链接

任何指针将不胜感激!

以下内容似乎很长,因为我已经粘贴了所有日志,但如果我遗漏了一些重要信息,请告诉我

谢谢,-马克

详情

我一直在介绍 Heroku,他们说安装 postgresql 是必需的,所以我使用自制软件进行了此操作

brew install postgresql

我没有检查它,我继续构建我的应用程序,但第二天我在本地运行 webapp 并得到错误,

Request URL:    http://localhost:5000/admin/
Django Version: 1.6.5
Exception Type: OperationalError
Exception Value:    
FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory
Exception Location: /Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/psycopg2/__init__.py in connect, line 164

所以我想调查一下。 现在我以前从未使用过 postgresql,所以 我想为 postgresql “进入命令行”

请注意,我是一个完整的新手,以前从未使用过 postgresql。

在 mysql 中我知道这是

mysql -u root -p

(然后输入密码)

我无法在 postgresql 中做同样的事情

  moriartymacbookair13:~ macuser$ postgres
  postgres does not know where to find the server configuration file.
  You must specify the --config-file or -D invocation option or set the PGDATA environment variable.
  moriartymacbookair13:~ macuser$ postgres -V
  postgres (PostgreSQL) 9.3.5

更多detailed heroku docs推荐使用postgres.app安装postgresql 我没有这样做,我用的是自制软件,所以我尝试卸载 postgresql

moriartymacbookair13:~ macuser$ brew uninstall postgres
Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
Error: Permission denied - /usr/local/bin/clusterdb

那没用,所以回到我原来的位置。为了弄清楚要指定什么路径,我跑了

brew info postgresql

如果你向下滚动到底部,你会看到它告诉我路径

moriartymacbookair13:~ macuser$ brew info postgres
postgresql: stable 9.3.5 (bottled), devel 9.4beta2
http://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.3.5_1 (2927 files, 38M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgresql.rb
==> Dependencies
Required: openssl ✔, readline ✔
Recommended: ossp-uuid ✔
==> Options
--32-bit
    Build 32-bit only
--enable-dtrace
    Build with DTrace support
--no-perl
    Build without Perl support
--no-tcl
    Build without Tcl support
--with-python
    Build with python support
--without-ossp-uuid
    Build without ossp-uuid support
--devel
    install development version 9.4beta2
==> Caveats
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
  https://github.com/Homebrew/homebrew/issues/issue/2510

To migrate existing data from a previous major version (pre-9.3) of PostgreSQL, see:
  http://www.postgresql.org/docs/9.3/static/upgrading.html

When installing the postgres gem, including ARCHFLAGS is recommended:
  ARCHFLAGS="-arch x86_64" gem install pg

To install gems without sudo, see the Homebrew wiki.

To reload postgresql after an upgrade:
    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
    postgres -D /usr/local/var/postgres

注意:我忽略了顶部的评论:

Conflicts with: postgres-xc
    /usr/local/Cellar/postgresql/9.3.5_1 (2927 files, 38M) *

不管怎样,我们有它,在大输出的末尾,它确认我的路径是 /usr/local/var/postgres,所以我尝试了 -D

moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory

所以这次我指定了配置文件:

moriartymacbookair13:~ macuser$ postgres --config-file=/usr/local/var/postgres/postgresql.conf 
postgres does not know where to find the database system data.
This can be specified as "data_directory" in "/usr/local/var/postgres/postgresql.conf", or by the -D invocation option, or by the PGDATA environment variable.

(出于绝望,我什至尝试删除它并重新开始)

                moriartymacbookair13:~ macuser$ initdb /usr/local/var/postgres
        The files belonging to this database system will be owned by user "macuser".
        This user must also own the server process.
The database cluster will be initialized with locale "en_GB.UTF-8".
        The default database encoding has accordingly been set to "UTF8".
        The default text search configuration will be set to "english".

        Data page checksums are disabled.

        initdb: directory "/usr/local/var/postgres" exists but is not empty
        If you want to create a new database system, either remove or empty
        the directory "/usr/local/var/postgres" or run initdb
        with an argument other than "/usr/local/var/postgres".
        moriartymacbookair13:~ macuser$ rm -rf /usr/local/var/postgres
        moriartymacbookair13:~ macuser$ initdb /usr/local/var/postgres -E utf8
        The files belonging to this database system will be owned by user "macuser".
        This user must also own the server process.

        The database cluster will be initialized with locale "en_GB.UTF-8".
        The default text search configuration will be set to "english".

        Data page checksums are disabled.

        creating directory /usr/local/var/postgres ... ok
        creating subdirectories ... ok
        selecting default max_connections ... 100
        selecting default shared_buffers ... 128MB
        creating configuration files ... ok
        creating template1 database in /usr/local/var/postgres/base/1 ... ok
        initializing pg_authid ... ok
        initializing dependencies ... ok
        creating system views ... ok
        loading system objects' descriptions ... ok
        creating collations ... ok
        creating conversions ... ok
        creating dictionaries ... ok
        setting privileges on built-in objects ... ok
        creating information schema ... ok
        loading PL/pgSQL server-side language ... ok
        vacuuming database template1 ... ok
        copying template1 to template0 ... ok
        copying template1 to postgres ... ok
        syncing data to disk ... ok

        WARNING: enabling "trust" authentication for local connections
        You can change this by editing pg_hba.conf or using the option -A, or
        --auth-local and --auth-host, the next time you run initdb.

        Success. You can now start the database server using:

            postgres -D /usr/local/var/postgres
        or
            pg_ctl -D /usr/local/var/postgres -l logfile start


    moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
    postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory
    moriartymacbookair13:~ macuser$ postgres --config-file=/usr/local/var/postgres/postgresql.conf 
    postgres does not know where to find the database system data.
    This can be specified as "data_directory" in "/usr/local/var/postgres/postgresql.conf", or by the -D invocation option, or by the PGDATA environment variable.

所以我看了一下那个文件:

在conf文件本身中,data变量没有定义

  moriartymacbookair13:~ macuser$ ls /usr/local/var/postgres/
  PG_VERSION       pg_ident.conf    pg_stat/         pg_xlog/
  base/            pg_multixact/    pg_stat_tmp/     postgresql.conf
  global/          pg_notify/       pg_subtrans/
  pg_clog/         pg_serial/       pg_tblspc/
  pg_hba.conf      pg_snapshots/    pg_twophase/
  moriartymacbookair13:~ macuser$ vim /usr/local/var/postgres/postgresql.conf 

表示值被注释掉了(见第41行……几乎整个文件都被注释掉了)

 35 # FILE LOCATIONS
 36 #-----------------------------------------------------------------------------    -
 37 
 38 # The default values of these variables are driven from the -D command-line
 39 # option or PGDATA environment variable, represented here as ConfigDir.
 40 
 41 #data_directory = 'ConfigDir'           # use data in another directory
 42                                         # (change requires restart)
 43 #hba_file = 'ConfigDir/pg_hba.conf'     # host-based authentication file
 44                                         # (change requires restart)
 45 #ident_file = 'ConfigDir/pg_ident.conf' # ident configuration file
 46                                         # (change requires restart)
 47 
 48 # If external_pid_file is not explicitly set, no extra PID file is written.
 49 #external_pid_file = ''                 # write an extra PID file
 50                                         # (change requires restart)

帮助:有人知道我应该为 data_directory 的位置指定“ConfigDir”吗?

如果有帮助 这是地窖文件夹的内容

moriartymacbookair13:~ macuser$ ls /usr/local/Cellar/postgresql/9.3.5_1/
COPYRIGHT                       homebrew.mxcl.postgresql.plist
HISTORY                         include/
INSTALL_RECEIPT.json            lib/
README                          share/
bin/

(我不明白为什么我在 Cellar 中有一些 postgres 文件,而在 usr/local/var 中有一些)

我也尝试了一些其他的东西:

    moriartymacbookair13:~ macuser$ sudo -u postgres pg_ctl -D /usr/local/var/postgres -w start
    sudo: unknown user: postgres

这是基于其他 SO 问题

    moriartymacbookair13:~ macuser$ ls -ld /usr/local/var/postgres/
    drwx------  19 macuser  admin   646B 20 Sep 19:46 /usr/local/var/postgres//
    moriartymacbookair13:~ macuser$ chown -R postgres /usr/local/var/postgres
    chown: postgres: illegal user name
    moriartymacbookair13:~ macuser$ brew uninstall postgresql
    Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
    Error: Permission denied - /usr/local/bin/clusterdb
    moriartymacbookair13:~ macuser$ brew uninstall postgres
    Uninstalling /usr/local/Cellar/postgresql/9.3.5_1...
    Error: Permission denied - /usr/local/bin/clusterdb
    moriartymacbookair13:~ macuser$ 

正如我所说,我安装 Postgresql 只是为了尝试 heroku,所以当我在本地运行 foreman start 时,Chrome 会从代码中给我一个错误。 (注意“django 应用程序”只是一个演示应用程序https://devcenter.heroku.com/articles/getting-started-with-python#prepare-the-app) 它适用于localhost:5000 home,但是当我添加/admin(将与数据库交互的页面)时,我收到以下错误:

OperationalError at /admin/
FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory
Request Method: GET
Request URL:    http://localhost:5000/admin/
Django Version: 1.6.5
Exception Location: /Users/macuser/Dropbox/code/heroku/awe01/lib/python2.7/site-packages/psycopg2/__init__.py in connect, line 164
Python Executable:  /Users/macuser/Dropbox/code/heroku/awe01/bin/python

这里有完整的错误回溯日志:http://dpaste.com/3CREGVQ

注意这个答案https://***.com/a/5053003/870121 推荐 createdb 不仅仅是 initdb

而且上面的错误和我运行createdb一样:

moriartymacbookair13:~ macuser$ createdb /usr/local/var/postgres/
createdb: could not connect to database template1: FATAL:  could not open relation mapping file "global/pg_filenode.map": No such file or directory

此处建议的步骤 Postgres is failing with 'could not open relation mapping file "global/pg_filenode.map" ' 是

Remove and re-add the launch agent
Kill the processes for <postgresql version number>
Initialize the db initdb /usr/local/var/postgres
Restart my computer

如果这是相关的,请告诉我如何“删除并重新添加启动代理”? 这是吗? (基于之前 brew info postgresql 的输出)

moriartymacbookair13:~ macuser$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
moriartymacbookair13:~ macuser$ killall postgresql
No matching processes belonging to you were found
moriartymacbookair13:~ macuser$ killall postgres
No matching processes belonging to you were found
moriartymacbookair13:~ macuser$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

终于 如果它启发了任何人,

moriartymacbookair13:~ macuser$ brew doctor
Please note that these warnings are just used to help the Homebrew maintainers
with debugging if you file an issue. If everything you use Homebrew for is
working fine: please don't worry and just ignore them. Thanks!

Warning: The /usr/local directory is not writable.
Even if this directory was writable when you installed Homebrew, other
software may change permissions on this directory. Some versions of the
"InstantOn" component of Airfoil are known to do this.

You should probably change the ownership and permissions of /usr/local
back to your user account.

Warning: Unbrewed dylibs were found in /usr/local/lib.
If you didn't put them there on purpose they could cause problems when
building Homebrew formulae, and may need to be deleted.

Unexpected dylibs:
    /usr/local/lib/libguide.dylib
    /usr/local/lib/libKLF_OGL.dylib

Warning: Some directories in your path end in a slash.
Directories in your path should not end in a slash. This can break other
doctor checks. The following directories should be edited:
    $/Users/macuser/Dropbox/code/aws/ElasticBeanstalkCommandLineTools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools.sh/macosx/python2.7/    /Users/macuser/Dropbox/code/aws/ElasticBeanstalkCommandLineTools/AWS-ElasticBeanstalk-CLI-2.6.3/AWSDevTools/eb/macosx/python2.7/

Warning: /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. The following tools exist at both paths:

    git
    git-cvsserver
    git-receive-pack
    git-shell
    git-upload-archive
    git-upload-pack

Consider setting your PATH so that /usr/local/bin
occurs before /usr/bin. Here is a one-liner:
    echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
moriartymacbookair13:~ macuser$ 

今天早些时候我遇到了这个错误 createdb:无法连接到数据库 postgres:无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接?

根据http://www.postgresql.org/docs/9.3/interactive/tutorial-createdb.html 但这个错误现在似乎已经消失了

关于 un 或重新安装 postgresql、解决 unknown user: postgres 错误、设置 #data_directory = 'ConfigDir' 的位置或任何其他提示的任何建议......我将不胜感激。现在已经为此浪费了一整天,所以我将不胜感激。

【问题讨论】:

注意,当我尝试使用 postgres.app 安装程序时,它告诉我“无法在端口 5432 上启动”并在安装过程中冻结 【参考方案1】:

我发布的问题的解决方案

    sudo brew uninstall postgresql(从字面上看,sudo 解决了我的问题...我读到 sudo brew 可能很危险,但在这种情况下效果很好) 重启 试图运行 postgres.app ...出现错误 重启 完全卸载 postgres.app(按照现场说明:退出,拖到废纸篓,然后按照http://postgresapp.com/documentation/install.html“Finder > Empty Trash...”) 重启 按照 postgresapp 的故障排除说明删除了数据文件夹 i.e., the 5 steps here: Resetting Postgres.app http://postgresapp.com/documentation/troubleshooting.html(我之前可能已经这样做了,我忘记了步骤5/7的顺序) 重启 通过 postgres.app 重新安装 postgresql 添加了我的/etc/profile 文件的路径...添加到~/.bashrc~/.bash_profile 出于某种原因对我不起作用。在这里

为我从 /etc/profile 中提取

它可能来自另一个文件,请参阅https://apple.stackexchange.com/questions/12993/why-doesnt-bashrc-run-automatically#comment13715_13019

 # 1:
 # For postgresql postgres postgres.app:
 # Otherwise psql isn't a recognised command
 # Based on http://postgresapp.com/documentation/cli-tools.html
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/9.3/bin
 # 2:
 # And this from https://devcenter.heroku.com/articles/heroku-postgresql#local-setup
export PATH="/Applications/Postgres93.app/Contents/MacOS/bin:$PATH:$PATH"
 # 3:
 # And now this based on error of file not existing
 # from http://***.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser -- don't think this made a difference though
export PGHOST=localhost

我认为这是矫枉过正;第一个更改绝对有用,因为它让我只需在终端中键入“psql”即可直接进入 psql(我个人甚至不需要-h localhost);我不太确定是否需要另外两个添加

就是这样。


最初是如何损坏的

我还没有弄清楚。


针对在 POSTGRESQL 上使用 DJANGO 的任何 MAC 用户的其他提示

如果相关,现在它正在工作,这里有一些我已经完成的步骤来完全设置并熟悉 postgres 和我的新 heroku 应用程序。这是我对 heroku、django 和 postgresql 的第一次体验,所以我尝试记录所有让我印象深刻的细节!

注意:我已经在本地完成了“投票”示例应用程序的教程(来自https://docs.djangoproject.com/en/1.6/intro/tutorial01/)。 我的目标是将这个/polls 应用添加到“入门”django 示例应用中(来自https://devcenter.heroku.com/articles/getting-started-with-python) (注意:我选择了 django 1.6,因为它似乎是 heroku 目前支持的最新版本。)

我正在运行 Mac OS X 10.9.5,但我的一些 cmets 可能对任何对本地/heroku postgres 集成感到困惑的人有所帮助

创建一个本地 postgres 数据库以与 django 应用程序一起使用

    一旦 postgres 应用程序运行(通过双击应用程序中的程序启动 -> Postgres,然后在 Mac 上注意通知栏中的大象),我可以登录到 psql。但首先直接从命令行,我通过命令创建了一个数据库

createdb cool01db

如果你得到这个,请注意, psql: could not connect to server: Connection refused Is the server running on host "localhost" (127.0.0.1) and accepting TCP/IP connections on port 5432? 或类似的错误,那么你没有正确设置 postgres 应用程序/服务器,所以不要按照我的说明进行操作

    现在我可以按照http://postgresapp.com/documentation/cli-tools.html 上的说明登录到 psql psql cool01db 运行 psql 命令\d 告诉我他们在这个数据库中什么都没有;当我执行syncdb 命令时,django 将自动创建表

    1234563 “gettingstarted”和“hello”旁边的文件夹。因此,我还在gettingstarted/settings.py 的“已安装应用程序”列表中添加了“投票”,按照https://docs.djangoproject.com/en/1.6/intro/tutorial01/#activating-models 我按照 django 教程中的说明编辑了 gettingstarted/settings.py 文件 https://docs.djangoproject.com/en/1.6/intro/tutorial01/#database-setuphttps://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-DATABASES 对我来说,这看起来像:

DATABASES = 'default': 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'cool01db', 'USER': '', 'PASSWORD': '', 'HOST': 'localhost', # '127.0.0.1' probably works also 'PORT': '5432',

使用新创建的本地 postgres 数据库而不是 heroku 数据库

    我在gettingstarted/settings.py 中注释掉了这个链接

# DATABASES['default'] = dj_database_url.config()

这是根据优秀评论,http://***.com/a/16422414/870121

    我导航到项目文件夹(其中包含上述三个文件夹和文件,如 manage.py)并运行(在本地,不在 heroku 上)python manage.py syncdb 这里提示我使用密码创建superuser

注意,现在 heroku 示例应用程序的表(hello_greeting 之类的表) django 民意调查应用程序(polls_choicepolls_question 之类的表)都在本地自动创建postgres db,如果我登录到 psql(从终端psql cool01db)并输入\d(一旦你进入),我就可以查看它们

    我运行foreman start 并导航到http://localhost:5000/admin/ 并输入我刚刚创建的超级用户用户名和密码。这成功让我登录到由我的本地 postgres 数据库提供支持的 /admin 站点 我看到管理面板有机会根据 django 教程添加一个问题,所以我添加了一个问题,并根据https://docs.djangoproject.com/en/1.6/intro/tutorial02/#make-the-poll-app-modifiable-in-the-admin 添加了一些答案 现在我访问了http://localhost:5000/polls,果然成功了 如果在终端中运行psql cool01db,然后运行sql 命令\d,我可以看到表格,select * from question_choice 向我展示了刚刚进行的更新。非常满意。

在开发中使用 heroku postgres db

    我在gettingstarted/settings.py 中取消了对这一行的注释

DATABASES['default'] = dj_database_url.config()

    我跑了heroku confighttps://devcenter.heroku.com/articles/getting-started-with-python#define-config-vars 知道这样做 输出是这样的:

(awe01)moriartymacbookair13:getstartapp macuser$ heroku config === awe01 Config Vars DATABASE_URL: postgres://aqmorelettersqz:uqry_pnFmorelettersYf@ec2-XX-XXX-XX-XX.compute-1.amazonaws.com:5432/dbmorelettersce HEROKU_POSTGRESQL_YELLOW_URL: postgres://aqmorelettersqz:uqry_pnFmorelettersYf@ec2-XX-XXX-XXX-XX.compute-1.amazonaws.com:5432/dbmorelettersce PAPERTRAIL_API_TOKEN: kmorelettersx TIMES: 2 (awe01)moriartymacbookair13:getstartapp macuser$

然后我将所有这些粘贴到隐藏文件 .env 中,该文件与 manage.py 位于同一文件夹中

语法说明:这意味着文件 .env 看起来像这样:

TIMES=2 DATABASE_URL=postgres://aqmorelettersqz:uqry_pnFmorelettersYf@ec2-XX-XXX-XX-XX.compute-1.amazonaws.com:5432/dbmorelettersce HEROKU_POSTGRESQL_YELLOW_URL=pos....

...即,带有= 符号但它们周围没有空格(并且此文件中没有 cmets)

注意,这涉及从 .env 文件中删除原始的“DATABASE_URL=”条目

据我了解,.env 文件是您本地机器看到的,但“heroku config”的输出是 heroku 机器看到的(欢迎更正),所以我希望它们匹配。

    注意:安装 Postgres 并且您可以连接后,您需要导出 DATABASE_URL 环境变量,以便您的应用程序在本地运行时连接到它。

运行命令export DATABASE_URL=postgres:///$(whoami)

这告诉 Postgres 在本地连接到与您的用户帐户名匹配的数据库(这是在安装过程中设置的)。

来自https://devcenter.heroku.com/articles/heroku-postgresql#local-setup

注意(对自己):我不明白这里发生了什么(我看不到由于运行它而更改的文件,或者究竟发生了什么)。但是我重新启动了计算机,一切仍然正常,我不需要再次运行。

    现在我在 heroku dyno 上运行“syncdb” heroku run python manage.py syncdb

(只有在您尚未创建超级用户时,系统才会提示您创建超级用户)

    我访问了 myappname.herokuapp.com/admin 并使用为 heroku postgresql 创建的超级用户帐户登录(为方便起见,我与本地帐户相同)。在那里我可以添加一个问题,这次这个问题被添加到 heroku postgresql db。访问 myappname.herokuapp.com/polls 会显示可供投票的问题

我想就是这样

现在,如果我执行 foreman start,我在 /db 或 /polls 看到的内容与访问我的 localhost:5000 或 myappname.herokuapp.com 相同,因为两者都使用 heroku postgresdb(我不甚至需要我的 postgres 服务器运行)

    要查看表并运行\dtSELECT * FROM... 之类的命令,我可以按照https://devcenter.heroku.com/articles/getting-started-with-python#provision-a-database 执行命令heroku pg:psql

感谢 Craig Ringer 的原始答案。

【讨论】:

【参考方案2】:

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

您安装了 PostgreSQL,但在服务器运行时删除或移动了数据目录。或者您将其安装在可移动磁盘上,然后将其删除。或者您系统上的某些应用程序会干扰其他应用程序更改文件的方式。

  moriartymacbookair13:~ macuser$ postgres
  postgres does not know where to find the server configuration file.

postgres 是服务器应用程序。客户是psql。但是,如果global/pg_filenode.map 丢失,您将不会再有psql 的运气。

  moriartymacbookair13:~ macuser$ brew uninstall postgres

sudo brew uninstall postgres

不管怎样,我们有它,在那个大输出的末尾 确认我的路径是/usr/local/var/postgres,所以我尝试了-D

moriartymacbookair13:~ macuser$ postgres -D /usr/local/postgres
postgres cannot access the server configuration file "/usr/local/postgres/postgresql.conf": No such file or directory

你走错了路。注意“brew info”所说的:

    Or, if you don't want/need launchctl, you can just run:
    postgres -D /usr/local/var/postgres

至于postgres用户:

moriartymacbookair13:~ macuser$ sudo -u postgres pg_ctl -D /usr/local/var/postgres -w start
sudo: unknown user: postgres

我认为某些 Mac OS X 安装使用 _postgrespostgres_。我没有mac,所以无法查看。但无论如何,这对您来说并不重要,因为 datadir 归您的用户所有,而不是 postgres:

moriartymacbookair13:~ macuser$ ls -ld /usr/local/var/postgres/
drwx------  19 macuser  admin   646B 20 Sep 19:46 /usr/local/var/postgres//

在我看来,您或您系统上的某个工具损坏了您的 PostgreSQL 数据目录,从而损坏了它。这不应该发生,所以我会努力找出删除 pg_filenode.map 的内容以及如何/何时删除。

如果数据目录中没有你关心的数据,你应该删除它并重新初始化数据库。

我没有 Mac,也看不到 Homebrew 如何配置您的 PostgreSQL 安装启动,但听起来它可能以用户 macuser 的身份运行 postgres。在这种情况下,只需:

launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
rm -rf /usr/local/var/postgres
initdb -D /usr/local/var/postgres -U postgres --auth-local peer --auth-host md5 -E utf-8l
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

最后,回复:

注意,当我现在尝试使用 postgres.app 安装程序时,它告诉我 “无法在端口 5432 上启动”并在安装过程中冻结

猜测一下,当您尝试让 Homebrew 的 postgres 服务器已经在 5432 上运行时,但由于数据目录损坏而无法运行。

所以你在这里真的有两件事:

重新初始化数据目录以使 PostgreSQL 再次工作;和 首先弄清楚它是如何损坏的

【讨论】:

谢谢!我完成了你的回答,包括运行sudo brew uninstall postgres,它运行状态-/usr/local/Cellar 文件夹现在不包含任何postgresql 文件夹-postgresqlpsql 是无法识别的命令下一步是什么? - 我是否需要删除仍然存在的文件夹/usr/local/var/postgres? - 我现在应该运行 postgres.app 安装程序吗?我不愿意在没有鼓励的情况下做任何事情,以防我仍处于(卸载)安装的一半 这里是现有/usr/local/var/postgres文件夹的内容:moriartymacbookair13:~ macuser$ cd /usr/local/var/postgres/ ... moriartymacbookair13:postgres macuser$ ls ... PG_VERSION pg_ident.conf pg_stat/ pg_xlog/ base/ pg_multixact/ pg_stat_tmp/ postgresql.conf global/ pg_notify/ pg_subtrans/ postmaster.opts pg_clog/ pg_serial/ pg_tblspc/ postmaster.pid pg_hba.conf pg_snapshots/ pg_twophase/ server.log PS 当天早些时候我没有错过“var”,结果与您指出的正确路径相同postgres -D /usr/local/var/postgres 至于您的其余答案,我没有还没有完成它,因为我需要先卸载/重新安装。终端 initdbpostgresqlcreatedb 中的命令暂时返回“找不到命令” 再次感谢@Craig,sudo brew 在这里似乎是一个安全有效的选择,然后 postgres.app 能够做到这一点。完整摘要添加为单独的答案。 它也解决了升级到 Mac OS Yosemite 的问题。

以上是关于自制软件的 data_directory 在哪里?或者对于 postgresql 或者我该如何解决错误,“”global/pg_filenode.map“:没有这样的文件或目录”?的主要内容,如果未能解决你的问题,请参考以下文章

对于自制 mysql 安装,my.cnf 在哪里?

如何在自制软件上使用 mpi 支持来构建提升?

将git链接到自制软件时出错[重复]

在使用自制软件安装的 Mac 上使用 Image::Magick 注释图像

如何使用自制软件在 macOS 上安装 qt4?

无法在 127.0.0.1:6379 连接到 Redis:使用自制软件拒绝连接