pg 数据到pg 数据的迁移,同时支持名称的变更

环境准备

docker-compose文件

内容偏多可以忽略部分

version: "3"
services:
  pgloader-csv:
    image: dimitri/pgloader
    volumes: 
    - "./init-db:/opt/db"
    - "./pgloader-config:/loader"
    command: pgloader /loader/csv/csv.load
  pgloader-fixed2:
    image: dimitri/pgloader
    volumes: 
    - "./init-db:/opt/db"
    - "./pgloader-config:/loader"
    command: pgloader /loader/fixed/app.load
  pgloader-fixed:
    image: dimitri/pgloader
    volumes: 
    - "./init-db:/opt/db"
    - "./pgloader-config:/loader"
    command: pgloader /loader/csv/fixed.load
  pgloader-sqlite:
    image: dimitri/pgloader
    volumes: 
    - "./init-db:/opt/db"
    - "./pgloader-config:/loader"
    command: pgloader https://github.com/lerocha/chinook-database/raw/master/ChinookDatabase/DataSources/Chinook_Sqlite_AutoIncrementPKs.sqlite postgresql://postgres:dalong@postgres:5432/postgres
  pgloader-pg:
    image: dimitri/pgloader
    volumes: 
    - "./init-db:/opt/db"
    - "./pgloader-config:/loader"
    command: pgloader /loader/pg/pg.load
  pgloader-mysql:
    image: dimitri/pgloader
    volumes: 
    - "./init-db:/opt/db"
    - "./pgloader-config:/loader"
    command: pgloader mysql://root:dalongrong@mysql/f1db postgresql://postgres:dalong@postgres:5432/f1db
  mysql:
    image: mysql:5.7.16
    ports:
      - 3306:3306
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: dalongrong
      MYSQL_DATABASE: gogs
      MYSQL_USER: gogs
      MYSQL_PASSWORD: dalongrong
      TZ: Asia/Shanghai
  postgres:
    image: postgres:9.6.11
    ports:
    - "5432:5432"
    environment:
    - "POSTGRES_PASSWORD:dalong"
  postgres2:
    image: postgres:9.6.11
    ports:
    - "5433:5432"
    environment:
    - "POSTGRES_PASSWORD:dalong"

pg 源数据库准备

主要是初始数据

CREATE TABLE fixed (
    a integer,
    b date,
    c time without time zone,
    d text
);
INSERT INTO "public"."fixed"("a","b","c","d")
VALUES
(123456789,E'2008-05-20',E'11:43:12.5',E'firstline'),
(133456789,E'2008-05-20',E'11:53:12.5',E'firstline'),
(123456,E'2008-05-21',E'15:18:23',E'leftblank-padded');
 

定义加载

说明,只同步fixed 表,同时被命名为fixed_app

load database
  from pgsql://postgres:dalong@postgres:5432/postgres
  into pgsql://postgres:dalong@postgres2:5432/postgres
  including only table names matching 'fixed' in schema 'public'
  ALTER TABLE NAMES MATCHING 'fixed' IN SCHEMA 'public' RENAME TO 'fixed_app';
 
 

启动pg 数据

docker-compose up -d postgres postgres2

运行数据迁移

docker-compose up pgloader-pg

效果

pgloader-pg_1 | WARNING:
pgloader-pg_1 | Couldn't re-execute SBCL with proper personality flags (/proc isn't mounted? setuid?)
pgloader-pg_1 | Trying to continue anyway.
pgloader-pg_1 | 2019-06-13T13:06:31.053000Z LOG pgloader version "3.6.2~devel"
pgloader-pg_1 | 2019-06-13T13:06:31.305000Z LOG Migrating from #<PGSQL-CONNECTION pgsql://postgres@postgres:5432/postgres {1007111323}>
pgloader-pg_1 | 2019-06-13T13:06:31.306000Z LOG Migrating into #<PGSQL-CONNECTION pgsql://postgres@postgres2:5432/postgres {10071129B3}>
pgloader-pg_1 | 2019-06-13T13:06:31.625000Z LOG report summary reset
pgloader-pg_1 | table name errors rows bytes total time
pgloader-pg_1 | ----------------------- --------- --------- --------- --------------
pgloader-pg_1 | fetch meta data 0 1 0.145s
pgloader-pg_1 | Create Schemas 0 0 0.001s
pgloader-pg_1 | Create SQL Types 0 0 0.008s
pgloader-pg_1 | Create tables 0 2 0.027s
pgloader-pg_1 | Set Table OIDs 0 1 0.001s
pgloader-pg_1 | ----------------------- --------- --------- --------- --------------
pgloader-pg_1 | "public".fixed_app 0 3 0.1 kB 0.021s
pgloader-pg_1 | ----------------------- --------- --------- --------- --------------
pgloader-pg_1 | COPY Threads Completion 0 4 0.018s
pgloader-pg_1 | Index Build Completion 0 0 0.000s
pgloader-pg_1 | Reset Sequences 0 0 0.010s
pgloader-pg_1 | Primary Keys 0 0 0.000s
pgloader-pg_1 | Create Foreign Keys 0 0 0.000s
pgloader-pg_1 | Create Triggers 0 0 0.001s
pgloader-pg_1 | Install Comments 0 0 0.000s
pgloader-pg_1 | ----------------------- --------- --------- --------- --------------
pgloader-pg_1 | Total import time ? 3 0.1 kB 0.029s
 
 

目标pg 数据

一个支持schema 迁移的load

load database
  from pgsql://postgres:dalong@postgres:5432/postgres
  into pgsql://postgres:dalong@postgres2:5432/postgres
  including only table names matching 'fixed' in schema 'public'
  ALTER TABLE NAMES MATCHING 'fixed' IN SCHEMA 'public' RENAME TO 'fixed_app'
  BEFORE LOAD DO
  $$ 
    create schema if not exists mv;
  $$
  AFTER LOAD DO
  $$ 
ALTER TABLE fixed_app set schema mv;
  $$;

说明

以上只是简单的同步,实际上我们可以处理schema 的设置,以及类型的变更,同时before after 等的依

参考资料

https://pgloader.readthedocs.io/en/latest/pgloader.html
https://github.com/rongfengliang/pgloader-learning

pgloader 学习(八) pg 2 pg 简单demo的更多相关文章

  1. pgloader 学习(九) pg 2 pg 使用with 参数控制同步逻辑

    pgloader 支持比较丰富的配置参数,同时默认数据在同步的时候是会进行索.schema 以及数据的同步对于实际我们可能存在需要进行控制,我们可以通过with 参数方便的处理 参考配置 load 文 ...

  2. pgloader 学习(四)一些简单操作例子

    上边已经说明了pgloader 的基本使用(篇理论),但是对于实际操作偏少,以下是一个简单的操作 不像官方文档那样,我为了方便,直接使用docker-compose 运行,同时这个环境,会在后边大部分 ...

  3. PHP多进程学习(一)__来初步了解一下PHP多进程及简单demo

    php是一门单进程弱类型的语言,PHP处理多并发主要是依赖服务器或PHP-FPM的多进程及它们进程的复用,多进程的作用优点大家可以去网上了解,PHP实现多进程在实际项目中意义也是不容小觑的.比如:日常 ...

  4. QML学习笔记(六)- 简单计时器和定时器

    做一个简单的qml计时器和定时器,左键触发计时,右键触发定时 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(六)- 简单计时器和定时器 左键点击按钮,触发计时器,中键可以暂停计时,同 ...

  5. 我的MYSQL学习心得(一) 简单语法

    我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  6. angular实现了一个简单demo,angular-weibo-favorites

    前面必须说一段 帮客户做了一个过渡期的项目,唯一的要求就是速度,我只是会点儿基础的php,于是就用tp帮客户做了这个项目.最近和客户架构沟通,后期想把项目重新做一下,就用现在最流行的技术,暂时想的使用 ...

  7. Python Tutorial 学习(八)--Errors and Exceptions

    Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...

  8. springboot 学习之路 1(简单入门)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  9. Django实战(一)之简单Demo

    菜鸟教程上Django安装可供参考: 参考链接: http://www.runoob.com/django/django-install.html 菜鸟教程上如果不行的话,下面博客网址可以供参考 Li ...

  10. 学习HTML 第五节.简单交互 加个按钮

    学习HTML 第五节.简单交互 也许你和我一样,对页面排版的兴趣小于网页交互,那么我们就先略过一些章节,直接先学一下简单交互. 前面点击图片打开链接的网址,已经是最简单的交互方式了,复杂的方式则需要用 ...

随机推荐

  1. Spring-Cloud之Zuul路由网关-6

    一.为什么需要Zuul? Zuul 作为微服务系统的网关组件,用于构建边界服务( Edge Service ),致力于动态路由.过滤.监控.弹性伸缩和安全.Zuul 作为路由网关组件,在微服务架构中有 ...

  2. MVC利用JQuery异步加载PartialView

    Javascript: $("#indexList").load('/Test/Index',{"id":"1","name&qu ...

  3. 自学Python编程的第六天(最后代码有更好的请告诉我)----------来自苦逼的转行人

    2019-09-16-23:09:06 自学Python的第六天,也是写博客的第六天 今天学的内容是有关dict字典的用法 看视频加上练习,目前还没遇到有难点,但是感觉很不好的样子 没有难点以后突然出 ...

  4. linux限定用户或组对磁盘空间的使用

    实验环境 环境:centos7.3 ,一块磁盘sdb分一个分区sdb1. 安装磁盘配额支持软件 yum install quota 制作文件系统,并以支持配额功能的方式挂载文件系统 mkfs.ext4 ...

  5. 谈谈MySQL中的锁

    谈谈MySQL中的锁 锁的定义 ​ 在生活中锁的例子就非常多了,所以应该很容易理解锁的含义.在计算机领域,可以这样来概述,锁是计算机协调多个进行进程并发访问某一资源的机制. ​ 在数据库中,锁也是一个 ...

  6. 英语caement水泥

    水泥石  又称净浆硬化体.是指 硬化后的水泥浆体,称为水泥石,在英语里是cement有时写作caement [1] ,是由胶凝体.未水化的水泥颗粒内核.毛细孔等组 成的非均质体. 中文名:水泥石 外 ...

  7. security Alternative forms secuerity

    security Alternative forms secuerity (mostly obsolete) English Alternative forms secuerity Pronuncia ...

  8. 高阶函数概念以及map/filter/reduce

    什么样的函数叫高阶函数:map(func, *iterables) --> map object 条件:1.函数接受函数作为参数 2.函数的返回值中包含函数 num_l = [1,2,3,4,5 ...

  9. Kubectl Rollout 回滚及Autoscale自动扩容

    Kubectl Rollout 回滚及Autoscale自动扩容 Kubernetes 中采用ReplicaSet(简称RS)来管理Pod.如果当前集群中的Pod实例数少于目标值,RS 会拉起新的Po ...

  10. golang之网络开发

    TCP Server/Client开发 net包提供network I/O开发接口,包括TCP/IP.UDP.DNS和Unix domain sockets. 常用开发一般仅需要最基础接口或函数: 服 ...