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. 《三》大话 Typescript 接口

    > 前言: 本文章为 TypeScript 系列文章. 旨在利用碎片时间快速入门 Typescript. 或重新温故 Typescript 查漏补缺.在官方 api 的基础上, 加上一些日常使用 ...

  2. 华为云实战开发】5.如何快速创建免费Git代码仓库【华为云技术分享】

    1 文章目的 本文主要帮助已经掌握或者想要掌握Git的开发者,如何更好的应用Git,以及更好的将Git与DevCloud结合应用. 2 概述 2.1 版本控制系统介绍 从狭义上来说,版本控制系统是软件 ...

  3. 一个Java程序员该有的良好品质

    一.前言 多年来,在IT领域,从一个普通的程序员到一个技术主管,再到一个技术经理,再到一个技术主管,他们践踏了许多坑,劳累了许多课程,还背着许多罐子.在提高他们的技术和管理能力的同时,他们一直在考虑如 ...

  4. KIP-382: MirrorMaker 2.0

    Status Motivation Public Interfaces Proposed Changes Remote Topics, Partitions Aggregation Cycle det ...

  5. Tomcat6项目移到Tomcat7 提示 404 解决方案

    一个项目在Tomcat6可以运行和正常访问,但是一部署到Tomcat7就提示404错误.那么可以通过以下方法解决: 找到项目下面的   WEB-INF  文件夹   用记事本打开  WEB.XML 找 ...

  6. Java自学-控制流程 switch

    Java的 switch 语句 switch 语句相当于 if else 的另一种表达方式 示例 1 : switch switch可以使用byte,short,int,char,String,enu ...

  7. (转载) @ConfigurationProperties 注解使用姿势,这一篇就够了

    SpringBoot中的@ConfigurationProperties 传送门: http://www.hellojava.com/a/82613.html

  8. java程序员常用的cmd命令

    1.查看端口号或者进程号使用情况 1.1.查看所有端口占用情况 C:\Users\Administrator>netstat -ano 活动连接 协议 本地地址 (ip:端口) 外部地址 状态 ...

  9. Java部分目录

    一.Java基础 1.访问权限控制 2.重载和覆盖 3.面向对象的特征 4.接口和抽象类 5.Java环境变量配置 6.Java英文缩写详解 7.如何在Maven项目中引入自己的jar包 8.使用ba ...

  10. Jenkins使用过程中注意事项

    jenkins自动部署注意事项: 安装jenkins https://blog.csdn.net/qq_37372007/article/details/81586751 1.当提示错误ERROR: ...