python - 从数据文件启动 postgres 数据库服务器

标签 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 我读到了 here 从那个链接它还说你必须登录到 postgresql 用户帐户。 (我大约一个月前才开始使用 ubuntu,我对它不是很熟悉,所以如果我在做愚蠢的陈述,请原谅我)。所以我环顾四周,发现我可以使用 sudo su postgres 登录到 postgres 帐户。哪个有效!而且我可以看到我以前无权查看的文件。因此,当我再次尝试运行 postgres -D/psql/data 时,我得到:

The program 'postgres' is currently not installed. To run 'postgres' please ask your administrator to install the package 'postgres-xc'

首先,我尝试安装 postgres-xc,但它缺少依赖项,然后当我搜索时,我读到如果我收到此消息,它可能是一个更大的错误,我应该不必安装 postgres-xc。所以我停止了尝试。

最终,我尝试再次运行该应用程序。但在它运行之前,它需要运行数据库,因为当我尝试使用 python [myapp].py 启动 flask 应用程序时没有运行数据库,我得到:

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 时,它都会出错并告诉我没有这样的命令。所以我必须找到 pg_ctl 命令的确切位置。它在 /usr/lib/postgres/9.3/bin/pg_ctl 中。然后我调用了 sudo -u postgres/usr/lib/postgresql/9.3/bin/pg_ctl start -D/psql/data。这给了我一个错误,我的配置文件有错误。这很奇怪,因为我从来没有碰过它,但我把那个错误注释掉了,然后我得到了真正的错误。

数据库是使用 postgres 9.4 创建的,但我使用的是 postgres 9.3。

所以我必须安装 9.4。可以找到说明here .完成后,我必须使用 sudo service postgresql stop 停止之前启动的 postgres 服务器。

最后,我能够使用 sudo -u postgres/usr/lib/postgresql/9.4/bin/pg_ctl start -D/psql/data 从文件中的数据库启动服务器。

现在我可以使用 sudo -su postgres 然后使用 psql 访问数据库。

谢谢大家!

最佳答案

很有可能 postgres 服务器在不同的用户帐户下运行,可能是通过初始化脚本运行的。

要快速入门,您可能需要:

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

postgres 用户身份运行 (sudo -u postgres) pg_ctl 命令,其中包含从 /启动 PostgreSQL 的指令psql/data 并等待它启动。

然后您应该查看 PostgreSQL 是否设置为由您的操作系统初始化脚本管理。一般来说,你应该能够做类似的事情:

sudo service postgresql start

sudo service postgresql-9.4 start

sudo service postgresql94

sudo systemctl start postgresql-9.4

取决于您的操作系统/版本以及 PostgreSQL 的安装方式。如果它是手动编译的,那么在您设置服务之前,这些都不会起作用,您应该立即这样做。阅读您的操作系统文档以了解操作方法。

关于python - 从数据文件启动 postgres 数据库服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30878823/

相关文章:

database - 什么时候我们需要在数据库设计中使用一对一的关系?

postgresql - 扩展 Postgresql 列中的日期范围

python - 用于 Python 的本地文件系统 (Windows) 的版本控制

Python-替换字符串中特定位置出现的所有字母

java - 使用 Flyway 管理修补程序

sql - 棘手的 postgresql 查询优化(带排序的不同行聚合)

django - 查询 Django 模型的 JSONField 的内容

python - 循环中异常处理程序的更好的Python模式?

python - numpy:如何根据一维数组中的条件从两个二维数组中选取行?

database - Slick 3 - 基于其他表以事务方式插入到多个表中