我已经在这一天工作了大约一天而我无法理解,我真的不知道在哪里可以看。我有一个目录, / psql / data / ,我正在尝试运行postgres -D /pgsql/data
来启动数据库服务器。但是,我得到了
postgres cannot access the server configuration file "/psql/data/postgresql.conf": Permission denied
这是一些背景知识。在我工作的地方,我们有一个使用Flask框架的应用程序,它使用Postgres数据库。我们在亚马逊服务器上运行此应用程序。此应用程序有效!我知道因为我以前用过它。然而,写它的人离开了公司,我现在负责它。另一位同事无意中停止了服务器,所以重启后我不得不重新启动它。
这是我尝试过的:
我读到的postgres -D /psql/data
sudo su postgres
here
从该链接,它还表示您必须登录到postgresql用户帐户。 (我刚开始使用ubuntu大约一个月前,我对它并不是非常熟悉,所以如果我做出愚蠢的陈述,请原谅我)。所以我环顾四周,发现我可以使用postgres -D /psql/data
登录postgres帐户。哪个有效!我可以看到以前没有权限看到的文件。那么当我尝试再次运行The program 'postgres' is currently not installed. To run 'postgres' please ask your administrator to install the package 'postgres-xc'
时,我得到:
python [myapp].py
首先我尝试安装 postgres-xc ,但是缺少依赖关系,然后当我去搜索时,我读到如果我收到此消息,那可能是一个更大的错误,我不应该不得不安装postgres-xc。所以我停止了尝试。
最终,我正在尝试再次运行该应用程序。但是在它运行之前它需要运行数据库,因为当我尝试用sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) 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?
启动烧瓶应用程序时没有运行数据库我得到:
engine = sqlalchemy.create_engine(conf['db'])
insp = reflection.Inspector.from_engine(engine)
我发现那是因为数据库没有运行。我无法启动数据库服务器。我试图提供尽可能多的相关信息,我将非常感谢任何关于我应该在下一步看的建议。如果需要,我还可以提供更多信息。
更新: 错误发生在这里
db: postgresql://work:app@localhost:5432/work
引擎是根据配置文件中的值创建的,即
sudo -u postgres pg_ctl -D /psql/data
但是一旦第二行试图执行它就会出错。
更新:
VICTORY!感谢所有帮助过我的人,所有的答案都指向了正确的方向(但不幸的是,只有一个人可以获得赏金)。
首先,每当我尝试sudo -u postgres /usr/lib/postgresql/9.3/bin/pg_ctl start -D /psql/data
时,它都会出错并告诉我没有这样的命令。所以我必须找到pg_ctl命令的确切位置。它位于 /usr/lib/postgres/9.3/bin/pg_ctl 中。所以我打电话给sudo service postgresql stop
。这给了我一个错误,我的配置文件有错误。这是奇怪的,因为我从来没有触及它,但我评论错误,然后我得到了真正的错误。
数据库是使用postgres 9.4制作的,但我使用的是postgres 9.3。
所以我不得不安装9.4。可以找到指令here。一旦我这样做,我不得不用sudo -u postgres /usr/lib/postgresql/9.4/bin/pg_ctl start -D /psql/data
停止之前启动的postgres服务器。
最后,我能够使用sudo -su postgres
从文件数据库启动服务器。
现在,我可以使用psql
然后(?i)
访问数据库。
谢谢大家!
答案 0 :(得分:3)
postgres
服务器很可能是在不同的用户帐户下运行,可能是由init脚本运行。
要快速入门,您可能希望:
sudo -u postgres pg_ctl -D /psql/data -w start
以postgres
用户(sudo -u postgres
)pg_ctl
命令运行,并带有从/psql/data
启动PostgreSQL的指令,并等待它开始。
然后,您应该查看PostgreSQL是否设置为由您的OS init脚本管理。一般来说,你应该能够做类似的事情:
sudo service postgresql start
sudo service postgresql-9.4 start
sudo service postgresql94
sudo systemctl start postgresql-9.4
取决于您的操作系统/版本以及PostgreSQL的安装方式。如果它是手工编译的,那么在您设置服务之前,这些都不会起作用,您应该立即进行。阅读您的操作系统文档以了解具体方法。
答案 1 :(得分:1)
加布里埃尔,首先。 “/psql/data/postgresql.conf”的文件权限是什么?
ls -l /psql/data/*.conf
对于超级用户,请尝试:
chmod 744 /psql/data/postgresql.conf
它允许你阅读这个文件,但根据你的问题的描述我相信只有这一步不能解决它。
然后,哪个O.S.你在用吗?
当我在Linux Ubuntu(11 LTS)环境中从PostgreSQL 8迁移到PostgreSQL 9时,我遇到了类似的问题。最后我放弃了直接打开文件(pg_start),而是使用pg_dump转储旧数据库中的文件,然后将数据库导入PG9。
如果你不能这样做。请问您是否在服务器上拥有管理权限这是您在PostgreSQL中使用的唯一数据库吗?
如果是这种情况,我会卸载服务器(apt-get remove,purge等,如果你正在使用apt)并重新安装它。因为你甚至没有pg_ctl可执行文件可以工作,所以缺少某些东西(lib,bin等)并且发现它有时需要太长时间,最好的解决方案是卸载/安装。
如果您无法在服务器中执行此操作,请在任何其他服务器上安装postgresql服务器并按照您的方式执行pg_start -D。它应该打开DB。然后,您可以转储数据库并将其导入生产服务器。