在pgAdmin中将整个数据库(其结构和数据)复制到新数据库的正确方法是什么?
当前回答
首先,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
其他回答
首先,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
要使用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
如果要复制整个模式,可以使用以下命令生成pg_dump:
pg_dump-h database.host.com-d数据库名-n schema_name-U数据库用户--密码
当您想要导入该转储时,可以使用:
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-连接字符串
或者只需将其组合成一行:
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”
创建数据库转储
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
在原始数据库处于流量状态的生产环境中,我只使用:
pg_dump production-db | psql test-db
推荐文章
- 查询JSON类型内的数组元素
- 获得PostgreSQL数据库中当前连接数的正确查询
- 纬度和经度的数据类型是什么?
- 如何在PostgreSQL中临时禁用触发器?
- 输入文件似乎是一个文本格式转储。请使用psql
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何添加列,如果不存在PostgreSQL?
- 如何在Postgres中获得两个字段的MIN() ?
- 截断Postgres数据库中的所有表
- 如何连接列在Postgres选择?
- 将varchar字段的类型更改为整数:"不能自动转换为整数类型"
- PostgreSQL可以索引数组列吗?
- PostgreSQL:角色不允许登录