dropdb:数据库删除失败:错误:检查点请求失败

时间:2015-10-04 16:07:52

标签: ruby-on-rails database macos postgresql

我只知道使用postgres db的基础知识并且已经使用了大约一年而没有任何重大问题我无法解决文档或现有的stackoverflow问题。

但是现在我有一个问题,我在我的mac上的pg db上一直收到以下错误。我尝试使用安装成功的brew安装更新的postgres,但我认为在此过程中我创建了另一个问题。尝试启动db时出错:

LOG:  database system shutdown was interrupted; last known up at 2015-10-04 11:04:08 EDT
LOG:  database system was not properly shut down; automatic recovery in progress
LOG:  redo starts at 0/6000090
LOG:  record with zero length at 0/6001990
LOG:  redo done at 0/6001960
LOG:  last completed transaction was at log time 2015-10-04 10:56:33.121103-04
FATAL:  could not open directory "pg_logical/snapshots": No such file or directory
LOG:  startup process (PID 12905) exited with exit code 1
LOG:  aborting startup due to startup process failure

所以我按照here的说明使用了pg_resetxlog,然后继续尝试和#34; REINDEX,转储数据库,重新initdb,并重新加载数据库"每pg文件9.4没有成功的结果。我只是在圈子里。

我可以重新开始使用数据库,但是我无法放弃它并重新开始。如果我运行dropdb dbname,我得

dropdb: could not connect to database template1: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

但我无法启动数据库,因为在运行

之后
pg_resetxlog -f /usr/local/var/postgres

回来"交易日志重置"我跑

pg_ctl start -D /usr/local/var/postgres

得到

pg_ctl: another server might be running; trying to start server anyway
server starting
FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 13114) running in data directory "/usr/local/var/postgres"?

所以我跑了

ps auxwww | grep postgres

得到了

Travis          13127   0.0  0.0  2432772    660 s000  S+   11:24AM   0:00.00 grep postgres
Travis          13120   0.0  0.0  2468112    604   ??  Ss   11:21AM   0:00.00 postgres: stats collector process       
Travis          13119   0.0  0.0  2604776   1444   ??  Ss   11:21AM   0:00.00 postgres: autovacuum launcher process       
Travis          13118   0.0  0.0  2604776    732   ??  Ss   11:21AM   0:00.00 postgres: wal writer process       
Travis          13117   0.0  0.0  2612968   1776   ??  Ss   11:21AM   0:00.05 postgres: writer process       
Travis          13116   0.0  0.0  2604776    756   ??  Ss   11:21AM   0:00.00 postgres: checkpointer process       
Travis          13114   0.0  0.2  2604776  14576   ??  S    11:21AM   0:00.02 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

所以我跑了

kill 13114

然后

ps auxwww | grep postgres

得到了

Travis          13139   0.0  0.0  2432772    652 s000  S+   11:25AM   0:00.00 grep postgres

当然,此时如果我再次尝试启动数据库,我会进入同一个圈子。

现在如果我跑

pg_resetxlog -f /usr/local/var/postgres

接着是

psql template1

并尝试删除数据库没有任何反应。

它是rails项目的数据库。所以如果我跑

rake db:drop

我得到另一个

PG::InternalError: ERROR:  checkpoint request failed

它还说服务器日志中有一个提示,我用

检查

住:

tail -f /usr/local/var/postgres/server.log

或者:

tail /usr/local/var/postgres/server.log

得到

ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory
ERROR:  could not open directory "pg_logical/snapshots": No such file or directory

我不知道如何解决这个问题,或者为什么它首先存在。搜索结果返回this,但没有解决方案显示手动创建目录的完整路径

此时我很困惑,我觉得我让事情变得更糟。

我检查了我系统上的其他数据库,看到我的机器上的所有数据库现在都有同样的问题。另外,我总是有1个grep postgres pid运行,我无法停止使用kill 13498或重启我的mac。

如何在不丢失机器上的所有数据库的情况下解决此问题?

Brew信息postgres显示:

postgresql: stable 9.4.4 (bottled), devel 9.5alpha2
Object-relational database system
https://www.postgresql.org/
Conflicts with: postgres-xc
/usr/local/Cellar/postgresql/9.4.1_1 (2996 files, 40M)
  Poured from bottle
/usr/local/Cellar/postgresql/9.4.4 (3014 files, 40M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/postgresql.rb
==> Dependencies
Required: openssl ✔, readline ✔
==> Options
--32-bit
    Build 32-bit only
--with-dtrace
    Build with DTrace support
--with-python
    Build with python support
--without-perl
    Build without Perl support
--without-tcl
    Build without Tcl support
--devel
    Install development version 9.5alpha2
==> 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/2510

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

To have launchd start postgresql at login:
  ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
Then to load postgresql now:
  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

我正在运行约塞米蒂10.10.5

3 个答案:

答案 0 :(得分:6)

经过几个小时的研究后,我又恢复了工作,而没有丢失任何数据库。

从我的其他mac我发现应该创建的目录应该在this帖子中引用需要创建的目录。我还创建了另外两个缺少的目录:

mkdir /usr/local/var/postgres/pg_logical
mkdir /usr/local/var/postgres/pg_logical/mappings
mkdir /usr/local/var/postgres/pg_logical/snapshots

接下来,我运行以下内容以获得良好的衡量标准

brew update

brew doctor 

然后我安装了brew服务(info docsarticle

brew tap homebrew/services

接下来我运行了以下我从提示here派生的内容,因为在故障排除/试错过程中,“pg_resetxlog -f / usr / local / var / postgres”命令开始抛出错误。

brew services stop postgresql

然后我尝试了我常用的

pg_ctl -D /usr/local/var/postgres start

一切都开始正常了。由于现在安装了brew服务,我可以使用以下命令启动数据库:

brew services start postgresql

我仍然不确定为什么在创建目录后重启我的mac没有帮助。而且我也不确定为什么/如何/何时删除这些目录。而且我不确定究竟是什么造成了问题。但在做了我列出的事情后,一切正常。

答案 1 :(得分:1)

您好,我在删除数据库时遇到以下错误:

  

错误:检查点请求失败

需要重新启动数据库,您可以尝试删除数据库。

成功删除数据库。

答案 2 :(得分:0)

如果磁盘空间已满,您将无法删除任何数据库,并且您将始终获得 '错误:检查点请求失败' 消息。

要手动删除数据库,请按以下步骤操作:
 1.关闭Postgres(注意Postgres不会重新启动,直到你释放磁盘空间)
 2.删除/var/lib/postgresql/9.x/main/base/dddd中的数据库数据目录(dddd)
 3.重新启动Postgres(现在应该重新启动你已经释放了空间)
 4.执行' drop database db_name'通过psql控制台(完成清理)