从数据文件

时间:2015-06-16 21:46:14

标签: python database postgresql flask

我已经在这一天工作了大约一天而我无法理解,我真的不知道在哪里可以看。我有一个目录, / 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)访问数据库。

谢谢大家!

2 个答案:

答案 0 :(得分:3)

postgres服务器很可能是在不同的用户帐户下运行,可能是由init脚本运行。

要快速入门,您可能希望:

sudo -u postgres pg_ctl -D /psql/data -w start

postgres用户(sudo -u postgrespg_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。然后,您可以转储数据库并将其导入生产服务器。