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

Python 从数据文件启动postgres数据库服务器,python,database,postgresql,flask,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数

我已经为此工作了大约一天,但我想不出来,我真的不知道还能去哪里找。我有一个目录,/psql/data/,我正试图运行
postgres-D/pgsql/data
来启动数据库服务器。然而,我明白了

postgres cannot access the server configuration file "/psql/data/postgresql.conf": Permission denied 
以下是一些背景资料。在我工作的地方,我们有一个使用Flask框架的应用程序,它使用Postgres数据库。我们正在Amazon服务器上运行此应用程序。这个应用程序工作!我知道,因为我以前用过。然而,写这封信的人离开了公司,我现在负责这封信。我的另一位同事无意中停止了服务器,所以重启后我不得不重新设置它

以下是我尝试过的:
postgres-D/psql/data
我读到的 从该链接中还显示您必须登录到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-upostgres/usr/lib/postgresql/9.3/bin/pg_ctl start-D/psql/data
。这给了我一个错误,我的配置文件有错误。这很奇怪,因为我从来没有碰过它,但是我把那个错误注释掉了,然后我得到了真正的错误

数据库是使用Postgres9.4创建的,但我使用的是Postgres9.3

所以我不得不安装9.4。可以找到指令。一旦我这样做了,我就不得不用
sudo服务postgresql stop
停止以前启动的postgres服务器

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

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


谢谢大家!

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的安装方式。如果它是手工编译的,那么在你建立一个服务之前,所有这些都不可能起作用,你应该立即建立一个服务。阅读您的操作系统文档以了解如何操作。

Gabriel,首先。 “/psql/data/postgresql.conf”的文件权限是什么

对于超级用户,请尝试:

chmod 744 /psql/data/postgresql.conf
它将允许您阅读此文件,但根据您的问题描述,我相信只有这一步不应该解决它

那么,您使用的是哪种O.S

当我在Linux Ubuntu(11 LTS)环境中从带有PostGIS的PostgreSQL 8迁移到PostgreSQL 9时,我也遇到了类似的问题。最后,我放弃了直接打开文件(pg_start),而是使用pg_dump从旧数据库转储文件,然后将数据库导入PG9

如果你不能做到这一点。请问您是否拥有服务器的管理权限,并且这是您在PostgreSQL中使用的唯一数据库

如果这是您的情况,我会卸载服务器(如果您使用apt,请获取删除、清除等),然后再次安装。因为你甚至没有pg_ctl可执行文件工作,所以缺少了一些东西(lib、bin等)?,要找出这个问题有时需要花费很长时间,最好的解决方案是卸载/安装


如果无法在服务器中执行此操作,请在任何其他服务器中安装postgresql服务器,并按照您的方式执行pg_start-D。它应该打开数据库。然后,您可以转储数据库并将其导入到生产服务器。

您可能希望将此作为一个示例:检查/etc/init.d中是否有名为postgres、pgsql或类似名称的文件。启动后,它应该说“postgresql9.3启动成功”或“无法启动…”它说了什么,服务器正在运行。下一步是检查身份验证参数。它们位于postgres数据目录中的
pg_hba.conf
chmod 744 /psql/data/postgresql.conf