PostgreSQL附属库complete fresh简单实现

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

可能出于某种目的,需要把一个PG数据库整个的复制到另一个数据库。

实现方法非常多,如:(第一个和第三个都需要注意reference关系)

1.使用DB_LINK打通两个数据库,这个的话也是比较通用的,缺点是要编译一下源码并安装DB_LINK套件。

2.使用pg_dump管道连接两个数据库直接导入到附属库

3.使用SHELL脚本实现

今天的话主要介绍一下使用SHELL脚本来实现附属库的数据传入

主库A放在上海IDC,使用postgresql8.3

附属库B放在香港IDC,使用的是POSTGRESQL8.4,假设已经有了与A库相同的DDL在某SCHEMA下面

步骤:

1.首先是在A库上建立一个只读用户,赋予需要被复制的表,数据库,SCHEMA只读权限。配置PG_HBA开放这个只读用户的访问权限

2.在B库服务器上配置一个.pgpass文件,放上连接A库的只读用户密码,这样的话在B库连接A库就不需要输密码了

3.在B库上编写2个SHELL脚本,就开搞了

第一个脚本是执行实体(关键字需要用引号)

#!/bin/bash

. /home/postgres/.bash_profile

if [ $# -ne 2 ]; then

echo -e “parameter error”

exit 1

fi

TABLE_NAME=$1

address_tbl_COL=”\”type\”, xxx, xxx”

message_tbl_COL=”id, xxx, xxx, xxx, \”type\”"

rp_newaccess_20100301_COL=”xxx, xxx, xxx, xxx”

tbl_action_log_COL=”id, xxx, xxx, xxx, xxx, xxx,objid”

eval TABLE_COL=”$”${TABLE_NAME}_COL

if [ $2 == "TRUNCATE" ]; then

psql -h /tmp -p 1921 -U user -d dbname -c “truncate table ${TABLE_NAME} CASCADE”

exit

fi

if [ $2 == "INSERT" ]; then

psql -h ***.***.***.*** -p 1921 -U user -d dbname -c “copy schema.${TABLE_NAME} (${TABLE_COL}) to stdout”|psql -h /tmp -p 1921 -U user -d dbname -c “copy ${TABLE_NAME} (${TABLE_COL}) from stdin”

exit

fi

exit

第二个脚本是执行外壳

#!/bin/bash

. /home/postgres/.bash_profile

# 判断是否已经在运行

test -f /home/postgres/script/run/db_xxx_sync_entry.run

if [ $? -eq 0 ]; then

exit 3

fi

# 生产在运行标记

touch /home/postgres/script/run/db_xxx_sync_entry.run

/home/postgres/script/db_xxx_sync.sh address_tbl TRUNCATE

/home/postgres/script/db_xxx_sync.sh message_tbl TRUNCATE

/home/postgres/script/db_xxx_sync.sh rp_newaccess_20100301 TRUNCATE

/home/postgres/script/db_xxx_sync.sh tbl_action_log TRUNCATE

/home/postgres/script/db_xxx_sync.sh address_tbl INSERT

/home/postgres/script/db_xxx_sync.sh message_tbl INSERT

/home/postgres/script/db_xxx_sync.sh rp_newaccess_20100301 INSERT

/home/postgres/script/db_xxx_sync.sh tbl_action_log INSERT

vacuumdb -ze -d dbname

# 删除运行标记

sleep 10

rm -f /home/postgres/script/run/db_xxx_sync_entry.run

4.创建相关目录,把脚本放进去就OK了

su – postgres

mkdir -p ~/script/run

剩下的事情就是,直接调用外壳就OK了,数据会自动添加进来。下次要添加表或者是更新了字段的话修改一下第一个脚本就可以了。

如果数据量比较大的情况下,可以在SHELL里面加上一些异常处理,邮件通知等等,随时掌握复制进度和健康状况。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
监控 数据可视化 关系型数据库
PostgreSQL主备库搭建
pg主备库的搭建,首先需在2个节点安装pg软件,然后依次在2个节点配置主备。 本文采用os为CentOS7.6,pg版本使用14.2,以下为详细部署步骤。
864 0
|
SQL 关系型数据库 数据库
PostgreSQL 删除数据库
PostgreSQL 删除数据库
369 0
|
弹性计算 网络协议 容灾
PostgreSQL 时间点恢复(PITR)在异步流复制主从模式下,如何避免主备切换后PITR恢复(备库、容灾节点、只读节点)走错时间线(timeline , history , partial , restore_command , recovery.conf)
标签 PostgreSQL , 恢复 , 时间点恢复 , PITR , restore_command , recovery.conf , partial , history , 任意时间点恢复 , timeline , 时间线 背景 政治正确非常重要,对于数据库来说亦如此,一个基于流复制的HA架构的集群,如果还有一堆只读节点,当HA集群发生了主备切换后,这些只读节点能否与新的主节点保持
1826 0
|
7月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
674 1
|
SQL 关系型数据库 数据库连接
PG技术大讲堂 - Part 3:PostgreSQL建库与使用
PG技术大讲堂 - Part 3:PostgreSQL建库与使用
234 1
|
SQL 关系型数据库 MySQL
如何迁移自建库用户密码和权限到RDS MySQL/PolarDB MySQL
如何迁移自建库用户密码和权限到RDS MySQL/PolarDB MySQL
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 删除数据库
PostgreSQL 删除数据库
196 0
|
关系型数据库 数据库 PostgreSQL
postgresql动态赋予用户库,表权限
postgresql动态赋予用户库,表权限
505 0
postgresql动态赋予用户库,表权限
|
关系型数据库 测试技术 数据库
PostgreSQL pg_rewind,时间线修复,脑裂修复,flashback - 从库开启读写后,回退为只读从库。异步主从发生角色切换后,主库rewind为新主库的从库
PostgreSQL pg_rewind,时间线修复,脑裂修复,flashback - 从库开启读写后,回退为只读从库。异步主从发生角色切换后,主库rewind为新主库的从库
2215 1
|
弹性计算 安全 关系型数据库
阿里云RDS PG 10 HA版 - 使用postgres_fdw外部表插件 - 实例内跨库访问其他库的表
标签 PostgreSQL , postgres_fdw , 阿里云 , 内核安全限制 背景 阿里云rds pg内核安全上做了限制,只能访问当前实例的其他库,所以使用dblink, postgres_fdw时,虽然PG功能上是可以访问其他远程实例的,但是阿里云RDS PG限制了只能访问当前实例。 另一方面,当前实例是HA版本,并且是云化版本,所以IP,PORT都可能在发生迁移、切换后发
651 0