在pgAdmin中将整个数据库(其结构和数据)复制到新数据库的正确方法是什么?


#1楼

PostgreSQL 9.1.2:

$ CREATEDB new_db_name -T orig_db_name -O db_user;

#2楼

对于那些仍然感兴趣的人,我想出了一个bash脚本,可以(或多或少)执行作者想要的。 我必须在生产系统上制作日常业务数据库副本,此脚本似乎可以解决问题。 切记更改数据库名称/用户/密码值。

#!/bin/bashif [ 1 -ne $# ]
thenecho "Usage `basename $0` {tar.gz database file}"exit 65;
fiif [ -f "$1" ]
thenEXTRACTED=`tar -xzvf $1`echo "using database archive: $EXTRACTED";
elseecho "file $1 does not exist"exit 1
fiPGUSER=dbuser
PGPASSWORD=dbpw
export PGUSER PGPASSWORDdatestr=`date +%Y%m%d`dbname="dbcpy_$datestr"
createdbcmd="CREATE DATABASE $dbname WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8' CONNECTION LIMIT = -1;"
dropdbcmp="DROP DATABASE $dbname"echo "creating database $dbname"
psql -c "$createdbcmd"rc=$?
if [[ $rc != 0 ]] ; thenrm -rf "$EXTRACTED"echo "error occured while creating database $dbname ($rc)"exit $rc
fiecho "loading data into database"
psql $dbname < $EXTRACTED > /dev/nullrc=$?rm -rf "$EXTRACTED"if [[ $rc != 0 ]] ; thenpsql -c "$dropdbcmd"echo "error occured while loading data to database $dbname ($rc)"exit $rc
fiecho "finished OK"

#3楼

如果数据库具有打开的连接,则此脚本可能会有所帮助。 我每天晚上都用它从实时生产数据库的备份中创建一个测试数据库。 假设您有一个来自生产数据库的.SQL备份文件(我在webmin内执行此操作)。

#!/bin/shdbname="desired_db_name_of_test_enviroment"
username="user_name"
fname="/path to /ExistingBackupFileOfLive.sql"dropdbcmp="DROP DATABASE $dbname"
createdbcmd="CREATE DATABASE $dbname WITH OWNER = $username "export PGPASSWORD=MyPasswordecho "**********"
echo "** Dropping $dbname"
psql -d postgres -h localhost -U "$username" -c "$dropdbcmp"echo "**********"
echo "** Creating database $dbname"
psql -d postgres -h localhost -U "$username" -c "$createdbcmd"echo "**********"
echo "** Loading data into database"
psql -d postgres -h localhost -U "$username" -d "$dbname" -a -f "$fname"

#4楼

使用pgAdmin,断开要用作模板的数据库的连接。 然后,选择它作为创建新数据库的模板,这样可以避免出现已在使用中的错误。


#5楼

尝试这个:

CREATE DATABASE newdb WITH ENCODING='UTF8' OWNER=owner TEMPLATE=templatedb LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8' CONNECTION LIMIT=-1;

gl XD


#6楼

要使用postgres克隆现有数据库,您可以这样做

/* KILL ALL EXISTING CONNECTION FROM ORIGINAL DB (sourcedb)*/
SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'SOURCE_DB' AND pid <> pg_backend_pid();/* CLONE DATABASE TO NEW ONE(TARGET_DB) */
CREATE DATABASE TARGET_DB WITH TEMPLATE SOURCE_DB OWNER USER_DB;

IT将终止与源数据库的所有连接,从而避免出现错误

ERROR:  source database "SOURCE_DB" is being accessed by other users

#7楼

我将这种方法与上面的示例结合在一起。 我在“负载不足”的服务器上工作,尝试从@zbyszek尝试该方法时出现错误。 我也追求“仅命令行”解决方案。

createdb: database creation failed: ERROR: source database "exampledb" is being accessed by other users

这是对我有用的东西( nohup开头的命令将输出移动到文件中并防止服务器断开连接 ):

  1. nohup pg_dump exampledb > example-01.sql
  2. createdb -O postgres exampledbclone_01

    我的用户是“ postgres”

  3. nohup psql exampledbclone_01 < example-01.sql

#8楼

在生产环境中,原始数据库处于繁忙状态,我只是在使用:

pg_dump production-db | psql test-db

#9楼

创建数据库转储

cd /var/lib/pgsql/
pg_dump database_name> database_name.out

重新发布数据库转储

psql -d template1
CREATE DATABASE database_name WITH  ENCODING 'UTF8' LC_CTYPE 'en_US.UTF-8' LC_COLLATE 'en_US.UTF-8' TEMPLATE template0;
CREATE USER  role_name WITH PASSWORD 'password';
ALTER DATABASE database_name OWNER TO role_name;
ALTER USER role_name CREATEDB;
GRANT ALL PRIVILEGES ON DATABASE database_name to role_name;CTR+D(logout from pgsql console)
cd /var/lib/pgsql/psql -d database_name -f database_name.out

#10楼

首先,以sudo作为数据库用户:

sudo su postgres

转到PostgreSQL命令行:

psql

创建新数据库,授予权限并退出:

CREATE DATABASE new_database_name;
GRANT ALL PRIVILEGES ON DATABASE new_database_name TO my_user;
\d

将结构和数据从旧数据库复制到新数据库:

pg_dump old_database_name | psql new_database_name

#11楼

在pgAdmin中,您可以从原始数据库进行备份,然后仅创建一个新数据库并从刚刚创建的备份进行还原:

  1. 右键单击源数据库,备份...,然后转储到文件。
  2. 右键单击,新建对象,新建数据库...,然后命名目标。
  3. 右键单击新数据库,还原...,然后选择文件。

#12楼

从文档开始 ,不建议将createdbCREATE DATABASE与模板一起使用:

尽管可以通过将其名称指定为模板来复制除template1以外的数据库,但尚未将其用作通用的“ COPY DATABASE”工具。 主要限制是,在复制模板数据库时,无法将其他会话连接到模板数据库。 如果启动时存在任何其他连接,则CREATE DATABASE将失败。 否则,将锁定与模板数据库的新连接,直到CREATE DATABASE完成。

pg_dumppg_dumpall是复制数据库和所有数据的好方法。 如果使用的是pgAdmin之类的GUI,则在执行备份命令时会在后台调用这些命令。 复制到新数据库分两个阶段完成:备份和还原

pg_dumpall将所有数据库保存在PostgreSQL集群上。 这种方法的缺点是最终可能会产生一个非常大的文本文件,其中包含创建数据库和填充数据所需的SQL。 这种方法的优点是您可以免费获得群集的所有角色(权限)。 要转储所有数据库,请从超级用户帐户执行此操作

pg_dumpall > db.out

并还原

psql -f db.out postgres

pg_dump有一些压缩选项,可以为您提供更小的文件。 我有一个生产数据库,我每天使用cron作业备份两次

pg_dump --create --format=custom --compress=5 ==file=db.dump mydatabase

其中compress是压缩级别(0到9), create告诉pg_dump添加命令来创建数据库。 通过使用还原(或移动到新群集)

pg_restore -d newdb db.dump

其中,newdb是要使用的数据库的名称。

其他需要考虑的事情

PostgreSQL使用ROLES来管理权限。 这些不是由pg_dump复制的。 另外,我们还没有处理postgresql.confpg_hba.conf中的设置(如果要将数据库移到另一台服务器上)。 您必须自己弄清楚conf设置。 但是我刚刚发现了一个备份角色的技巧。 角色是在集群级别管理的,您可以要求pg_dumpall使用--roles-only命令行开关--roles-only备份角色。


#13楼

如果要复制整个模式,可以使用以下命令进行pg_dump:

pg_dump -h database.host.com -d database_name -n schema_name -U database_user --password

当您要导入该转储时,可以使用:

psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name" -f sql_dump_to_import.sql

有关连接字符串的更多信息: https : //www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING

或者只是将其组合在一个衬纸中:

pg_dump -h database.host.com -d postgres -n schema_name -U database_user --password | psql "host=database.host.com user=database_user password=database_password dbname=database_name options=--search_path=schema_name”

#14楼

  1. 在pgAdmin中打开主窗口,然后打开另一个查询工具窗口
  2. 在pgAdmin的主窗口中,

断开要用作模板的“模板化”数据库。

  1. 转到查询工具窗口

如下运行2个查询

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE pg_stat_activity.datname = 'TemplateDB' AND pid <> pg_backend_pid();

(上面的SQL语句将终止所有与TemplateDB的活动会话,然后您可以将其选择为模板来创建新的TargetDB数据库,这样可以避免出现已经使用的错误。)

CREATE DATABASE 'TargetDB'WITH TEMPLATE='TemplateDB'CONNECTION LIMIT=-1;

#15楼

我尝试了许多不同的解决方案来还原postgres备份。 我遇到了MacOS上被拒绝的问题,似乎没有解决方案。

这是我如何使其工作的方法:

Postgres带有Pgadmin4。 如果使用macOS,则可以按CMD + SPACE并键入pgadmin4来运行它。 这将在Chrome中打开一个浏览器标签。

如果在使pgadmin4正常工作时遇到错误, killall pgAdmin4在终端中尝试killall pgAdmin4 ,然后重试。


获取pgadmin4 +备份/还原的步骤

1.创建备份

通过右键单击数据库->“备份”来执行此操作

2.给文件起一个名字。

就像test12345一样。 单击备份。 这将创建一个二进制文件转储,而不是.sql格式

3.查看下载位置

屏幕的右下角应该有一个弹出窗口。 点击“更多详细信息”页面,查看备份下载到的位置

4.查找下载文件的位置

在这种情况下,它是/users/vincenttang

5.从pgadmin恢复备份

假设您正确执行了步骤1到步骤4,您将拥有一个还原二进制文件。 有时您的同事希望在其本地计算机上使用您的还原文件。 说过该人去pgadmin并恢复

通过右键单击数据库->“还原”来执行此操作

6.选择文件查找器

确保手动选择文件位置,请勿将文件拖放到pgadmin的上载器字段中。 因为您会遇到错误权限。 相反,找到您刚创建的文件:

7.找到所说的文件

您可能必须将右下角的过滤器更改为“所有文件”。 此后,从第4步中查找文件。现在点击右下角的“选择”按钮以确认

8.恢复所说的文件

您将再次看到此页面,其中包含选定文件的位置。 继续还原它

9.成功

如果一切正常,则右下角应弹出一个指示恢复成功的指示器。 您可以导航到表以查看每个表上的数据是否已正确还原。

10.如果不成功:

如果第9步失败,请尝试删除数据库上的旧公共模式。 转到“查询工具”

执行以下代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

现在再次尝试步骤5到9,应该可以解决

摘要

当我遇到错误权限问题并且无法以超级用户身份登录时,这就是我必须在Postgres上备份/还原备份的方式。 或使用chmod为文件夹设置读/写凭据。 此工作流适用于pgadmin中默认为“自定义”的二进制文件转储。 我认为.sql是相同的方式,但我尚未测试


#16楼

这是仅使用pgadmin4 GUI(通过备份和还原)在数据库上创建副本的整个过程。

Postgres带有Pgadmin4。 如果使用macOS,则可以按CMD + SPACE并键入pgadmin4来运行它。 这将在Chrome中打开一个浏览器标签。


复制步骤

1.创建备份

通过右键单击数据库->“备份”来执行此操作

2.给文件起一个名字。

就像test12345一样。 单击备份。 这将创建一个二进制文件转储,而不是.sql格式

3.查看下载位置

屏幕的右下角应该有一个弹出窗口。 点击“更多详细信息”页面,查看备份下载到的位置

4.查找下载文件的位置

在这种情况下,它是/users/vincenttang

5.从pgadmin恢复备份

假设您正确执行了步骤1到步骤4,您将拥有一个还原二进制文件。 有时您的同事希望在其本地计算机上使用您的还原文件。 说过该人去pgadmin并恢复

通过右键单击数据库->“还原”来执行此操作

6.选择文件查找器

确保手动选择文件位置,请勿将文件拖放到pgadmin的上载器字段中。 因为您会遇到错误权限。 相反,找到您刚创建的文件:

7.找到所说的文件

您可能必须将右下角的过滤器更改为“所有文件”。 此后,从第4步中查找文件。现在点击右下角的“选择”按钮以确认

8.恢复所说的文件

您将再次看到此页面,其中包含选定文件的位置。 继续还原它

9.成功

如果一切正常,则右下角应弹出一个指示恢复成功的指示器。 您可以导航到表以查看每个表上的数据是否已正确还原。

10.如果不成功:

如果第9步失败,请尝试删除数据库上的旧公共模式。 转到“查询工具”

执行以下代码块:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

现在再次尝试步骤5到9,应该可以解决


#17楼

贝尔答案的命令行版本:

createdb -O ownername -T originaldb newdb

这应该在数据库主数据库(通常是postgres)的特权下运行。


#18楼

不了解pgAdmin,但是pgdump为您提供SQL数据库的转储。 您只需要用相同的名称创建数据库并执行

psql mydatabase < my dump

恢复所有表及其数据和所有访问权限。


#19楼

创建新数据库时,Postgres允许使用服务器上的任何现有数据库作为模板。 我不确定pgAdmin是否在创建数据库对话框中为您提供了该选项,但是如果没有,您应该能够在查询窗口中执行以下操作:

CREATE DATABASE newdb WITH TEMPLATE originaldb OWNER dbuser;

不过,您可能会得到:

ERROR:  source database "originaldb" is being accessed by other users

要将所有其他用户与数据库断开连接,可以使用以下查询:

SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity
WHERE pg_stat_activity.datname = 'originaldb' AND pid <> pg_backend_pid();

#20楼

在pgAdmin中将整个数据库(其结构和数据)复制到新数据库的正确方法是什么?

回答:

CREATE DATABASE newdb WITH TEMPLATE originaldb;

尝试和测试。

在PostgreSQL中创建数据库的副本相关推荐

  1. PostgreSQL中的数据库实例、模式、用户(角色)、表空间

    2019独角兽企业重金招聘Python工程师标准>>> 本文参考:http://blog.csdn.net/kanon_lgt/article/details/5931522 htt ...

  2. 在PostgreSQL中创建Arcgis企业级地理数据库

    版本说明: PostgreSQL 9.2.3 64位 arcgis 10.2.2 32位 安装说明: 安装之前首先要查看arcgis版本支持的PostgreSQL 版本 如果是远程部署需要提前设置Po ...

  3. 教你怎么在Dreamweaver中创建数据库

    下面是我在学校的网站梦工厂学习到的和网站有关的东西,在这里和大家分享,希望能够接触到更多的热爱网站的朋友喽. 一个好的网页不光要有一个好的外表,更主要的是要有一个数据库连接,光有了网站网页那样只有自己 ...

  4. 怎么在linux下用mysql建库_在MySQL/MariaDB中创建数据库、数据库用户和授予特权(针对Linux平台)...

    在本文中,将学习MySQL/MariaDB数据库创建.数据库用户创建以及如何向用户授予权限,方法针对Linux平台.安装数据库请参考为CentOS 8操作系统安装MySQL的方法,以安装MySQL 8 ...

  5. 阿里云ecs实例中创建数据库

    阿里云ecs实例中创建数据库 安装mysql 创建数据库 1.登录 2.新建数据库 3.执行.sql文件 4.查询表,验证是否创建成功 4.退出数据库 安装mysql 参考https://blog.c ...

  6. sql server中创建数据库和表的语法

    下面是sql server中创建数据库,创建数据表以及添加约束的sql语句: use master --创建数据库 if exists (select * from sysdatabases wher ...

  7. Mac家谱制作软件MacFamilyTree 9好用吗?如何在MacFamilyTree 9中创建数据库的备份?

    Mac家谱制作软件MacFamilyTree 9好用吗?MacFamilyTree 能够帮助你记录.储存.和显示您的家庭信息,打印家族树.列表.卡片.遗传图表,能够让你清晰的了解你的家族人员情况,是一 ...

  8. mysql创建test_MySQL中,创建数据库test正确的SQL语句是( )

    [多选题]PHP中可以实现循环的是(). [填空题]色彩模型是一种抽象的数学模型,即用________来对色彩进行描述的方法. [填空题]人耳可感受声音频率的范围是 HZ . [填空题]PHP中,多行 ...

  9. 在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号、书名、单价、数量)。 利用JDBC连接数据库dbjava,实现数据表的增删 改查

    题目 1.在MySql数据库中创建数据库dbjava,数据表book,字段包括bno,bname,price,count(编号.书名.单价.数量). 2.利用JDBC连接数据库dbjava,实现数据表 ...

最新文章

  1. Android中处理崩溃异常
  2. 全球股市巨震,如何用深度学习预测股价?
  3. python 代理ip验证_python爬虫成长之路(二):抓取代理IP并多线程验证
  4. PHP 表单 - 4(验证邮件和URL)
  5. 使用mysqlbinlog恢复指定表
  6. mysql select命令加速_数据库教程
  7. greenplum 替代mysql_转:MySQL到Greenplum迁移分析
  8. 微信开发之调起摄像头、本地展示图片、上传下载图片
  9. 返回目录中所有JPG图像的文件名列表
  10. struts2 中 constant标签
  11. sql row_number() over() 来自动产生行号
  12. No.2小白的HTML+CSS心得篇
  13. jade选峰之后怎么去掉_jade使用教程
  14. 【“计算机科学与技术”专业小白成长系列】Peter Norvig:十年学会编程
  15. java 8 排序_java8——排序
  16. 冷热分离和直接使用大数据库_【TBase开源版测评】深度测评TBase的shard分片和冷热分离存储特性...
  17. 如何区分精确率(precision)、准确率(accuracy)和召回率(recall)
  18. 在国企的日子(第六章 大赛)
  19. fd在python_python中fd()是什么
  20. 电脑Tab键有什么功能?分享Tab键的6个妙用

热门文章

  1. 《Windows Mobile平台应用与开发》写作工作顺利进行中
  2. 练习:string.h常用字符串
  3. oracle-day1
  4. 【最小割】HDU 4289 Control
  5. 整理 被appstore 拒绝审核通过的原因
  6. 使用Zabbix Agent 2监控MongoDB
  7. 概率论与数理统计 (二)计算题和应用题
  8. 简单明白彻底解决 MySQL 中文编码问题
  9. Linux中的Cron ,任务计划
  10. Spring boot 配置文件,输入key值,自动补全--- 通过安装插件实现