Postgres将会列出我的数据库,但是当我尝试连接到它时不存在它

问题描述 投票:2回答:1

从终端,我

sudo su postgres

psql

\l

postgres=# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 nwnx      | nwnx     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

但是尝试连接时:

\c nwnx

FATAL:  database "nwnx" does not exist
Previous connection kept

quote_ident:

postgres=# select quote_ident(datname) from pg_database;
 quote_ident 
-------------
 postgres
 template1
 template0
 nwnx
(4 rows)

dumpall

pg_dumpall --schema-only | grep '\connect'
\connect template1
pg_dump: [archiver (db)] connection to database "nwnx" failed: FATAL:  database "nwnx" does not exist
pg_dumpall: pg_dump failed on database "nwnx", exiting

创建脚本:

pg_dumpall --schema-only | grep -i database
-- PostgreSQL database cluster dump
-- PostgreSQL database dump
-- Dumped from database version 11.5
-- PostgreSQL database dump complete
pg_dump: [archiver (db)] connection to database "nwnx" failed: FATAL:  database "nwnx" does not exist
pg_dumpall: pg_dump failed on database "nwnx", exiting

以nwnx用户身份连接

$: psql postgres -U nwnx
psql (11.5)
Type "help" for help.

postgres=> \conninfo
You are connected to database "postgres" as user "nwnx" via socket in "/run/postgresql" at port "5432".
postgres=> \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   
-----------+----------+----------+-------------+-------------+-----------------------
 nwnx      | nwnx     | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

postgres=> \c nwnx
FATAL:  database "nwnx" does not exist
Previous connection kept

Postgres版本为11.5

关于我在做什么错或发生什么事情的任何提示?

postgresql postgresql-11
1个回答
0
投票

这看起来很像数据库损坏,特别是索引pg_database_datname_index(在GetDatabaseTuple()中使用)已损坏。

请确保尝试以下操作:

-- should show all databases
SELECT oid, datname, datname::bytea FROM pg_database;
SET enable_seqscan = off;
-- should omit database "nwnx"
SELECT oid, datname, datname::bytea FROM pg_database ORDER BY datname;

如果证实我的怀疑,请执行以下操作:

  • 停止数据库使用

    pg_ctl stop -m immediate -D /path/to/data/directory
    

    并进行数据库目录的冷备份。

  • 启动数据库使用

    pg_ctl start -o -P -D /path/to/data/directory
    
  • 连接到数据库postgres并运行

    REINDEX TABLE pg_database;
    
  • 停止并重新启动PostgreSQL。

不从群集中获取pg_dumpall并将其还原到使用initdb创建的新群集。

© www.soinside.com 2019 - 2024. All rights reserved.