【问题标题】:Creating a PostgreSQL database backup via psql on macOS在 macOS 上通过 psql 创建 PostgreSQL 数据库备份
【发布时间】:2020-10-15 07:12:18
【问题描述】:

我正在尝试使用 psql 在 macOS 上通过终端创建 PostgreSQL local db 转储。我的下一步是upload/import my entire db to my Amazon RDS PostgreSQL db instance

谁能帮助我使用终端命令为我的“mydb”数据库创建转储文件“mydbdump.sql”。我已经对现有问题进行了分类,搜索了论坛(尝试过similar Stack Overflow question),甚至是 Amazon RDS 文档(上图,链接),并且对这些文档中的任何命令都没有运气。我做错了什么?

这是我迄今为止尝试过的(我没有得到任何回报,甚至没有错误):

通过 sudo:

sudo -u postgres psql pg_dump -Fc -o -f /Users/<my_computer>/database_backup.sql mydb

通过 psql,连接到 mydb (\c mydb;):

mydb-# pg_dump dbname=mydb -f mydbdump.sql

mydb-# pg_dump -U postgres -W -F t mydb &gt; /Users/&lt;my_computer&gt;/database_backup.sql

mydb-# pg_dump -Fc mydb &gt; /Users/&lt;my_computer&gt;/database_backup.sql

mydb-# pg_dump -U postgres mydb &gt; database_backup.sql

mydb-# pg_dump -Fc mydb &gt; /Users/&lt;my_computer&gt;/database_backup.sql

mydb-# pg_dump -U postgres -W -F t mydb &gt; /Users/&lt;my_computer&gt;/database_backup.sql

供参考: 我在 settings.py 中使用 Django:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'mydb',
        'USER': 'dbuser',
        'PASSWORD': '<MYPASSWORD>',
        'HOST': 'localhost',
        'PORT': '',
    }
}

顺便说一句,我的 Django 应用程序运行成功。

当我在 mydb 中列出所有数据库关系时:

\dt mydb;

输出:

List of relations
 Schema |            Name            | Type  | Owner  
--------+----------------------------+-------+--------
 public | auth_group                 | table | dbuser
 public | auth_group_permissions     | table | dbuser
 public | auth_permission            | table | dbuser
 public | auth_user                  | table | dbuser
 public | auth_user_groups           | table | dbuser
 public | auth_user_user_permissions | table | dbuser
 public | django_admin_log           | table | dbuser
 public | django_content_type        | table | dbuser
 public | django_migrations          | table | dbuser
 public | django_session             | table | dbuser
 public | polls_choice               | table | dbuser
 public | polls_question             | table | dbuser
(12 rows)

当我列出 psql 中的所有模式时:

select s.nspname as table_schema,
       s.oid as schema_id,  
       u.usename as owner
from pg_catalog.pg_namespace s
join pg_catalog.pg_user u on u.usesysid = s.nspowner
order by table_schema;

输出:

table_schema    | schema_id |  owner   
--------------------+-----------+----------
 information_schema |     13337 | postgres
 pg_catalog         |        11 | postgres
 pg_temp_1          |     12314 | postgres
 pg_toast           |        99 | postgres
 pg_toast_temp_1    |     12315 | postgres
 public             |      2200 | postgres

【问题讨论】:

  • 你没有在 psql 中运行 pg_dump

标签: django postgresql psql


【解决方案1】:

首先在 psql 中运行 pg_dump 将不起作用。

第二,这个:

sudo -u postgres psql pg_dump -Fc -o -f /Users/<my_computer>/database_backup.sql mydb

是第一件事的变体。你想要:


sudo -u postgres pg_dump -Fc -f /Users/<my_computer>/database_backup.sql mydb

pg_dump 本身就是一个客户端程序。

注意:没有-o。有-O 是无主的。

查看本页底部的示例:

https://www.postgresql.org/docs/current/app-pgdump.html

最后你确定这不会让你出错吗?:

test(5432)=# pg_dump dbname=mydb -f mydbdump.sql;
ERROR:  syntax error at or near "pg_dump"
LINE 1: pg_dump dbname=mydb -f mydbdump.sql;

如果没有,我会在 postgresql.conf 中检查您的日志记录设置。

【讨论】:

  • 啊哈,谢谢。我不知道 pg_dump 是一个程序。然后关于“/Users//database_backup.sql” > 我在我的计算机上指定了保存我的 .sql 文件的路径,这准确吗?我问是因为自从你回答后,我发现我的“pg_dump”位于:/usr/local/bin/pg_dump。
  • 是的,-f 之后的任何内容都将是文件的保存位置。我链接到的页面上有很多示例。
  • 谢谢!!这是最终起作用的命令: sudo -u postgres pg_dump mydb > db.sql > 计算机密码 > postgres 密码
【解决方案2】:

这是最终奏效的命令:

sudo -u postgres pg_dump mydb > db.sql 

这促使我:

  • 我的电脑密码
  • 然后是我的 postgres 密码

我不需要指定任何其他路径。 db.sql 文件自动保存到我的根目录。

【讨论】:

  • 是的,计算机用户执行 sudo,用户 postgres 执行转储。只要知道上面创建了一个纯文本转储文件,您将需要使用 psql 而不是 pg_restore 来恢复它。
  • 了解 pg_restore,再次感谢您的帮助 Adrian。
猜你喜欢
  • 1970-01-01
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 2021-12-01
相关资源
最近更新 更多