AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 294043
Accepted
Russell Christopher
Russell Christopher
Asked: 2021-06-10 16:18:28 +0800 CST2021-06-10 16:18:28 +0800 CST 2021-06-10 16:18:28 +0800 CST

成功恢复 PostgreSQL 数据库后无模式、表

  • 772

我备份了托管在 PostgreSQL 的 RDS 实例上的堆栈交换存档数据库,如下所示:

pg_dump stackexchange -h <host> -U postgres -password -o > stack.dmp

...几个小时后,我有了一个不错的 151GB 转储文件。

接下来,我将这只小狗恢复到另一个实例:

psql --set ON_ERROR_STOP=on -h <otherhost> -U postgres -d stackexchange -f stack.dmp

...大约一个小时后,它完成了,没有错误。幸福。

奇怪的是,pgadmin4 没有显示应该创建的模式,也没有显示任何表、视图等。与 psql 连接并发出 \dn 只返回公共模式。

对于傻笑,我查看了数据库的大小,它看起来正确(ish):

stackexchange=> SELECT pg_size_pretty( pg_database_size('stackexchange') );
 pg_size_pretty
----------------
 145 GB
(1 row)

我用 head 从转储中抓取前 50 行,一切看起来都很好:

--
-- PostgreSQL database dump
--

-- Dumped from database version 11.10
-- Dumped by pg_dump version 11.11

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: stackoverflow; Type: SCHEMA; Schema: -; Owner: postgres
--

CREATE SCHEMA stackoverflow;


ALTER SCHEMA stackoverflow OWNER TO postgres;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: posthistory; Type: TABLE; Schema: stackoverflow; Owner: postgres
--

CREATE TABLE stackoverflow.posthistory (
    id integer NOT NULL,
    posthistorytypeid integer,
    postid integer,
    revisionguid text,
    creationdate timestamp without time zone NOT NULL,
    userid integer,
    posttext text,
    jsonfield jsonb
);


ALTER TABLE stackoverflow.posthistory OWNER TO postgres;

所以我有点难过。所有这些东西都正确执行。数据库大小合适……但没有对象。

接下来,我很好奇并尝试重新创建应该已经创建的模式(“stackoverflow”):

stackexchange=> create schema stackoverflow;

5 分钟后,我在控制台中没有得到任何响应。psql 只是坐在那里。

在此处输入图像描述

这听起来对任何人来说都很熟悉吗?我很困惑。关于下一步的想法?

编辑:我在 psql 上做了一个 CTRL-BREAK。结果:

stackexchange=> create schema stackoverflow;

^CCancel request sent
ERROR:  canceling statement due to user request
CONTEXT:  while inserting index tuple (0,12) in relation "pg_namespace_nspname_index"
postgresql pg-dump
  • 1 1 个回答
  • 833 Views

1 个回答

  • Voted
  1. Best Answer
    Laurenz Albe
    2021-06-10T23:27:54+08:002021-06-10T23:27:54+08:00

    您显示的pg_dump命令不能是您使用的命令,因为没有-o选项,并且assword不是有效的端口号。

    无论如何,您的问题是另一个问题:有一个打开的事务持有一个锁定pg_namespace,阻止您创建模式。

    调试如下:

    • 在psql会话中,运行

      SELECT pg_backend_pid();  -- to figure out your process ID
      \i stack.dmp
      
    • 当第一个会话挂起时,启动第二个会话并运行

      SELECT pg_blocking_pids(12345);  -- use the pid of the blocked session
      

    现在您知道哪些会话阻止了您。查看pg_stat_activity以了解有关这些交易的更多信息。如有必要,使用 终止它们pg_terminate_backend。

    如果罪魁祸首是准备好的事务,请在其中查找条目pg_prepared_xacts并使用 撤消它们ROLLBACK PREPARED。

    • 2

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve