SQLCipher数据迁移到PostgreSql详细攻略

news/2025/9/23 14:24:30/文章来源:https://www.cnblogs.com/tony-god/p/19107115

SQLCipher数据迁移到PostgreSql详细攻略

步骤一、安装Docker

  • Windows11 安装Docker客户端教程:自己百度一下。

步骤二、SQLCipher解密,转换为Sqlite3

  • 访问官网进行下载
  • 使用DB Browser (SQLCipher) 客户访问数据库文件后,点开菜单栏 “工具” --> "设置加密",密码置空后,即可进行解密,自动将SQLCipher转换为Sqlite3。
  • 注意:这个解密的过程耗时比较长,请耐心等待;

步骤三、将Sqlite中的数据迁移到PostgreSql中

1. Docker安装PostgreSql

docker run --name my_postgres \-e POSTGRES_PASSWORD=mysecretpassword \  # 设置超级用户密码,务必修改-p 5432:5432 \                           # 映射主机端口 5432 到容器端口 5432-v pgdata:/var/lib/postgresql/data \     # 使用命名卷 pgdata 持久化数据-d \                                     # 后台运行容器postgres                                 # 使用官方镜像
  • -e POSTGRES_PASSWORD=mysecretpassword: ​务必修改mysecretpassword为你自己设定的强密码,这是默认的超级用户 postgres的密码。
  • -v pgdata:/var/lib/postgresql/data: 这里的 pgdata是 Docker 管理的命名卷(Named Volume)​的名称。如果该卷不存在,Docker 会自动创建它。数据会存储在 Docker 的管理区域(例如 /var/lib/docker/volumes/),与容器生命周期分离,从而实现持久化。
  • 使用 docker volume ls可以查看所有已创建的命名卷。
  • 增加 --restart=unless-stopped 可以自动启动容器,除非手动停止。

2. 拉取pgloader镜像

docker pull ghcr.io/dimitri/pgloader:latest

3. 准备迁移脚本 migration.load

LOAD DATABASEFROM sqlite:////data/main_data.dbINTO postgresql://postgres:123456@host.docker.internal:5432/mainWITH include drop, create tables, create indexes, reset sequences, foreign keys,workers = 8, concurrency = 1ALTER SCHEMA 'main' RENAME TO 'public'BEFORE LOAD DO
$$ create schema if not exists public; $$;

🔔 参数说明​:

  • FROM: SQLite 源数据库连接字符串。这里使用了 sqlite:///前缀,后接文件路径。请注意,即使SQLite数据库有密码(你连接字符串中的Password=E32CE1F29B6745F984DA86FBC0159F9F),​pgloader对SQLite的支持目前可能不直接支持通过连接字符串传递密码。你可能需要先使用SQLite工具解密数据库或寻找其他方法(如临时移除密码)再进行迁移。/是路径分隔符,D:/NewData/main_data.db是你的数据库文件路径。

  • INTO: PostgreSQL 目标数据库连接字符串。格式为 postgresql://username:password@host:port/database_name

  • WITH 子句:

    • include drop: 迁移前删除目标数据库中已存在的同名表(⚠️谨慎使用,会清除现有数据!​​ 如果 scan_spec数据库是新创建的或可清空,则使用此选项;若需保留现有数据,请移除此选项)。
    • create tables: 在PostgreSQL中创建表。
    • create indexes: 创建索引。
    • reset sequences: 重置序列(例如自增主键的序列)。
    • foreign keys: 创建外键约束。
    • workers = 8: 使用8个工作线程加速迁移(可根据CPU核心数调整)。
    • concurrency = 1: 控制并发度。
  • ALTER SCHEMA: SQLite 没有模式概念,其表通常可视为在 main模式中。此命令在迁移后将模式名改为 PostgreSQL 默认的 public

  • BEFORE LOAD DO: 迁移前执行的 SQL 语句,这里确保 public模式存在。

4. 执行迁移

使用 Docker 运行 pgloader并执行迁移脚本。​注意将 /path/to/your/migration.load 替换为你实际的 migration.load文件的绝对路径。/path/to/your/data 替换为你实际的 db 文件的所在目录。

docker run --rm -v /path/to/your/migration.load:/migration.load -v /path/to/your/data:/data ghcr.io/dimitri/pgloader:latest pgloader /migration.load

🔔 命令说明​:

  • --rm: 容器退出后自动删除。

  • -v /path/to/your/migration.load:/migration.load: 将宿主机上的加载脚本挂载到容器内。

  • -v /path/to/your/data:/data: 将包含你 SQLite 数据库文件的目录挂载到容器内的 /data目录,确保容器内的 pgloader 能访问到 /path/to/your/data/main_data.db 文件(因此在.load文件中,路径可以写为 sqlite:////data/main_data.db,但上述脚本已使用宿主机绝对路径,此挂载是为了保证一致性)。

  • ghcr.io/dimitri/pgloader:latest: pgloader 的 Docker 镜像。

  • pgloader /migration.load: 在容器内运行的命令,执行迁移脚本。

步骤四、特别注意

由于 Pgloader 在将 SQLite 的 INTEGER 类型(在 SQLite 中通常用来表示布尔值,0 或 1)迁移到 PostgreSQL 时,将它映射成了 PostgreSQL 的 BIT 类型,而不是 BOOLEANINTEGER。PostgreSQL 的 BIT 类型是位字符串类型,它和 INTEGER 类型无法直接进行 = 比较。所以当你执行 "isdelete" = 0 时,PostgreSQL 就会报错,提示找不到一个可以比较 BITINTEGER 的操作符。报错信息如下:

SQL 错误 [42883]: ERROR: operator does not exist: bit = integer
Hint: No operator matches the given name and argument types. You might need to add explicit type casts.

所以我们需要将数据库中所有bit(1)类型的字段转换成boolean类型,但是PostgreSql中这两个类型不能直接转换,所以要先将bit(1)先转成 integer 再转成 boolean。下面是一个可以完成这个任务的 PostgreSQL PL/pgSQL 代码块。你可以将其作为一个匿名代码块 (DO 语句) 在 psql 或任何 PostgreSQL 客户端中运行。

DO $$DECLARE
rec RECORD;
table_name TEXT;
column_name TEXT;
alter_sql TEXT;BEGIN-- 遍历数据库中所有表的模式(public)
FOR rec IN
SELECT
c.table_schema,
c.table_name,
c.column_name
FROM
information_schema.columns c
WHERE
c.table_schema = 'public' -- 只在 public 模式下查找,可以根据需要更改
AND c.data_type = 'bit'
AND c.character_maximum_length = 1
LOOP
table_name := rec.table_name;
column_name := rec.column_name;
RAISE NOTICE '正在处理表: %, 列: %', table_name, column_name;-- 构造 ALTER TABLE 语句,先转成 integer
alter_sql := format('ALTER TABLE %I.%I ALTER COLUMN %I TYPE INTEGER USING %I::integer;',
rec.table_schema, table_name, column_name, column_name);-- 执行 SQL
EXECUTE alter_sql;-- 构造 ALTER TABLE 语句,再转成 boolean
alter_sql := format('ALTER TABLE %I.%I ALTER COLUMN %I TYPE BOOLEAN USING %I::boolean;',
rec.table_schema, table_name, column_name, column_name);-- 执行 SQL
EXECUTE alter_sql;
END LOOP;
RAISE NOTICE '所有 bit(1) 字段转换完成。';
END $$;

到此,SQLite的数据已经全部迁移到PostgreSql啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/912827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站的域名做邮箱吗天推广人的网站

final 有什么用? 用于修饰类、属性和方法;被final修饰的类不可以被继承被final修饰的方法不可以被重写被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改…

tklink的登录做网站建站是什么专业

文章目录作业1:机器翻译1. 日期转换1.1 数据集2. 用注意力模型进行机器翻译2.1 注意力机制3. 可视化注意力作业2:触发词检测1. 数据合成:创建语音数据集1.1 听一下数据1.2 音频转频谱1.3 生成一个训练样本1.4 全部训练集1.5 开发集2. 模型2.1…

戚墅堰网站建设建材网站免费模板

异步请求 同步发送请求过程如下 浏览器页面在发送请求给服务器,在服务器处理请求的过程中,浏览器页面不能做其他的操作。只能等到服务器响应结束后才能,浏览器页面才能继续做其他的操作。 异步发送请求过程如下浏览器页面发送请求给服务器&…

番禺做网站的襄阳大型网站建设

我昨天在控制面板-用户-管理计算机内置账户,在“Zhao Yikang”用户名(另外还有administrator用户,名我没动)属性里面,“隶属于”那个界面里面,删除了administrator账户,同时还保留有一个user账户没动没删。之后重启电脑…

网站建设必须经历的过程制作网站具体需要什么材料

2、DataFrame 2.1 介绍 在Spark语义中,DataFrame是一个分布式的行集合,可以想象为一个关系型数据库的表,或者一个带有列名的Excel表格。它和RDD一样,有这样一些特点: Immuatable:一旦RDD、DataFrame被创…

青羊区网站建设西安专业做网站的的公司

一.题目描述 输入三角形的三边,输出三角形的面积。比如:输入三角形的三边长度是3,4,5.输出6 二.思路分析 利用海伦公式可以很好解决 海伦公式的表达式如下: s (a b c) / 2 面积 sqrt((s * (s - a) * (s - b) * (…

app网站开发的特点wordpress 4.7下载

先决条件:BigInteger基础的java.math.BigInteger.negate()方法返回一个BigInteger,其值为(-this)。 negate()方法将更改BigInteger的单个位。用法:public BigInteger negate()参数:该方法不接受任何参数。返回值:该方法返回(-this…

国外购物网站排行榜网站如果实现微信支付

android计算每个目录剩余空间丶总空间以及SD卡剩余空间ublic class MemorySpaceCheck { /** * 计算剩余空间 * param path * return */ public static String getAvail ...ionic+angularjs开发hybrid App(环境配置+创建测试项目)本文使用的…

企业工商年报:企业与个体工商户工商年报专业代办服务详解

一、概述总结 企业工商年报是依托微擎 IP 市场提供的企业与个体工商户工商年报专业服务项目。该服务不仅提供便捷高效的年报代办支持,还给出明确保障,若办理不成功可全额退款,同时关联官方政策依据,确保服务合规性…

温州做网站优化企业培训考试系统题库

WebStorm是一款功能强大的JavaScript集成开发环境,凭借智能代码补全、实时分析和代码重构、集成版本控制、强大的调试和测试工具、实时预览和集成前端工具以及自定义配置和插件支持等功能,成为开发者首选的利器。 前端开发WebStorm WebStorm是一款功能强…

使用 Playwright MCP 实现小红书全自动发布的完整流程

你是否曾为自动化脚本中的小红书登录验证而头疼?是否曾因登录态频繁失效而不得不手动介入,让所谓的“全自动”名存实亡? Playwright Model Context Protocol (MCP) 的推出,彻底改变了这一局面。它不再是简单的浏览…

美团饿了么霸王餐 CPS 系统:外卖流量变现新选择

一、概述总结 会创科技推出的美团饿了么霸王餐 CPS 系统,是一款聚焦外卖领域流量变现与商家推广需求的创新工具,依托微擎云端实现交付。 该系统核心优势显著,无需运营者进行招商工作,也无需垫付资金,降低了前期投…

百家企业案例征集 | 让测试经验成为行业的共同财富

大家好,这里是霍格沃兹测试开发学社。 在软件行业快速演进的今天,测试工程师的角色正在发生深刻变化: 我们不再只是“问题的发现者”,而是系统稳定性的守护者; 不再只是“功能的验证者”,更是研发效能和交付质量…

Linux CAN 设备简介

Linux CAN 设备简介Linux CAN 设备简介 在 Linux 系统中,CAN(Controller Area Network)是一种用于嵌入式系统的可靠通信协议,广泛应用于汽车、工业自动化等领域。Linux 提供了对 CAN 的原生支持,通过 SocketCAN 子…

网站建设 招标任务书flash网站开发

k8s部署redis6节点,组成3主3从集群模式 一般来说,redis部署有三种模式。 单实例模式,一般用于测试环境。 哨兵模式 集群模式后两者用于生产部署 哨兵模式 在redis3.0以前,要实现集群一般是借助哨兵sentinel工具来监控master节点…

宁波静态网站建设深圳网站设计制作公司 维仆

目录 引言 一、HTTPS工作过程 二、Tomcat 在访达中找到下载好的Tomcat文件夹(这个要求按顺序) zsh: permission denied TOMCAT的各部分含义: 引言 在密码中一般是:明文密钥->密文(加密) &#xff…

淮阴网站建设个人如何建设网站

FL Studio 21.2 带有 stem 分离和 FL Cloud,这是一项专为 FL Studio 打造的具有里程碑意义的新服务。其他新功能包括 FL Studio Fruity Edition 的 Audio Clips(音频剪辑)和一个新的模拟建模合成器 Kepler。 为庆祝 FL Studio 21.2 的发布&am…

做标准件网站网站建设需要哪些技术人员

金九银十,大家都铆足干劲想抓住机会涨薪进大厂。结合这几年的行业趋势,想要挑战大厂面试,首先必须吃透Selenium自动化测试框架设计。这里说一下原因:首先,一线互联网大厂无一例外,全都要求测试人掌握Seleni…

腾讯wordpress 建站制作微信小程序

需要像qt中添加模块,这里,缺少qtopenglwidgets模块

网站怎么吸引人合肥科技职业学院网站建设与管理

系列文章目录及链接 目录 前言 一、朴素贝叶斯通俗理解及定义 二、原理理解及公式 1、概率基础 2、贝叶斯公式 3、拉普拉斯平滑系数 三、**算法实现 四、接口实现 1、新闻数据集介绍 2、API 3、流程 3.1、获取数据 3.2、数据预处理 3.3、特征工程 3.4、朴素贝叶…