最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SQLCipher數(shù)據(jù)遷移到PostgreSql詳細(xì)教程

 更新時(shí)間:2025年09月24日 08:50:54   作者:God寫注釋沒有代碼  
這篇文章主要介紹了SQLCipher數(shù)據(jù)遷移到PostgreSql詳細(xì)教程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

步驟一、安裝Docker

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

步驟二、SQLCipher解密,轉(zhuǎn)換為Sqlite3

  • 訪問(wèn)官網(wǎng)進(jìn)行下載
  • 使用DB Browser (SQLCipher) 客戶訪問(wèn)數(shù)據(jù)庫(kù)文件后,點(diǎn)開菜單欄 “工具” --> "設(shè)置加密",密碼置空后,即可進(jìn)行解密,自動(dòng)將SQLCipher轉(zhuǎn)換為Sqlite3。
  • 注意:這個(gè)解密的過(guò)程耗時(shí)比較長(zhǎng),請(qǐng)耐心等待;

步驟三、將Sqlite中的數(shù)據(jù)遷移到PostgreSql中

1. Docker安裝PostgreSql

docker run --name my_postgres \
  -e POSTGRES_PASSWORD=mysecretpassword \  # 設(shè)置超級(jí)用戶密碼,務(wù)必修改
  -p 5432:5432 \                           # 映射主機(jī)端口 5432 到容器端口 5432
  -v pgdata:/var/lib/postgresql/data \     # 使用命名卷 pgdata 持久化數(shù)據(jù)
  -d \                                     # 后臺(tái)運(yùn)行容器
  postgres                                 # 使用官方鏡像
  • -e POSTGRES_PASSWORD=mysecretpassword: ?務(wù)必修改mysecretpassword為你自己設(shè)定的強(qiáng)密碼,這是默認(rèn)的超級(jí)用戶 postgres的密碼。
  • -v pgdata:/var/lib/postgresql/data: 這里的 pgdata是 Docker 管理的命名卷(Named Volume)?的名稱。如果該卷不存在,Docker 會(huì)自動(dòng)創(chuàng)建它。數(shù)據(jù)會(huì)存儲(chǔ)在 Docker 的管理區(qū)域(例如 /var/lib/docker/volumes/),與容器生命周期分離,從而實(shí)現(xiàn)持久化。
  • 使用 docker volume ls可以查看所有已創(chuàng)建的命名卷。
  • 增加 --restart=unless-stopped 可以自動(dòng)啟動(dòng)容器,除非手動(dòng)停止。

2. 拉取pgloader鏡像

docker pull ghcr.io/dimitri/pgloader:latest

3. 準(zhǔn)備遷移腳本 migration.load

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

?? 參數(shù)說(shuō)明?:

  • ?FROM: SQLite 源數(shù)據(jù)庫(kù)連接字符串。這里使用了 sqlite:///前綴,后接文件路徑。請(qǐng)注意,即使SQLite數(shù)據(jù)庫(kù)有密碼(你連接字符串中的Password=E32CE1F29B6745F984DA86FBC0159F9F),?pgloader對(duì)SQLite的支持目前可能不直接支持通過(guò)連接字符串傳遞密碼。你可能需要先使用SQLite工具解密數(shù)據(jù)庫(kù)或?qū)ふ移渌椒ǎㄈ缗R時(shí)移除密碼)再進(jìn)行遷移。/是路徑分隔符,D:/NewData/main_data.db是你的數(shù)據(jù)庫(kù)文件路徑。
  • ?INTO: PostgreSQL 目標(biāo)數(shù)據(jù)庫(kù)連接字符串。格式為 postgresql://username:password@host:port/database_name。
  • ?WITH 子句:
    • include drop: 遷移前刪除目標(biāo)數(shù)據(jù)庫(kù)中已存在的同名表(??謹(jǐn)慎使用,會(huì)清除現(xiàn)有數(shù)據(jù)!?? 如果 scan_spec數(shù)據(jù)庫(kù)是新創(chuàng)建的或可清空,則使用此選項(xiàng);若需保留現(xiàn)有數(shù)據(jù),請(qǐng)移除此選項(xiàng))。
    • create tables: 在PostgreSQL中創(chuàng)建表。
    • create indexes: 創(chuàng)建索引。
    • reset sequences: 重置序列(例如自增主鍵的序列)。
    • foreign keys: 創(chuàng)建外鍵約束。
    • workers = 8: 使用8個(gè)工作線程加速遷移(可根據(jù)CPU核心數(shù)調(diào)整)。
    • concurrency = 1: 控制并發(fā)度。
  • ?ALTER SCHEMA: SQLite 沒有模式概念,其表通??梢暈樵?nbsp;main模式中。此命令在遷移后將模式名改為 PostgreSQL 默認(rèn)的 public。
  • ?BEFORE LOAD DO: 遷移前執(zhí)行的 SQL 語(yǔ)句,這里確保 public模式存在。

4. 執(zhí)行遷移

使用 Docker 運(yùn)行 pgloader并執(zhí)行遷移腳本。?注意將 /path/to/your/migration.load 替換為你實(shí)際的 migration.load文件的絕對(duì)路徑。/path/to/your/data 替換為你實(shí)際的 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

?? 命令說(shuō)明?:

  • --rm: 容器退出后自動(dòng)刪除。
  • -v /path/to/your/migration.load:/migration.load: 將宿主機(jī)上的加載腳本掛載到容器內(nèi)。
  • -v /path/to/your/data:/data: 將包含你 SQLite 數(shù)據(jù)庫(kù)文件的目錄掛載到容器內(nèi)的 /data目錄,確保容器內(nèi)的 pgloader 能訪問(wèn)到 /path/to/your/data/main_data.db 文件(因此在.load文件中,路徑可以寫為 sqlite:////data/main_data.db,但上述腳本已使用宿主機(jī)絕對(duì)路徑,此掛載是為了保證一致性)。
  • ghcr.io/dimitri/pgloader:latest: pgloader 的 Docker 鏡像。
  • pgloader /migration.load: 在容器內(nèi)運(yùn)行的命令,執(zhí)行遷移腳本。

步驟四、特別注意

由于 Pgloader 在將 SQLite 的 INTEGER 類型(在 SQLite 中通常用來(lái)表示布爾值,0 或 1)遷移到 PostgreSQL 時(shí),將它映射成了 PostgreSQL 的 BIT 類型,而不是 BOOLEAN 或 INTEGER。PostgreSQL 的 BIT 類型是位字符串類型,它和 INTEGER 類型無(wú)法直接進(jìn)行 = 比較。所以當(dāng)你執(zhí)行 "isdelete" = 0 時(shí),PostgreSQL 就會(huì)報(bào)錯(cuò),提示找不到一個(gè)可以比較 BIT 和 INTEGER 的操作符。報(bào)錯(cuò)信息如下:

SQL 錯(cuò)誤 [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.

所以我們需要將數(shù)據(jù)庫(kù)中所有bit(1)類型的字段轉(zhuǎn)換成boolean類型,但是PostgreSql中這兩個(gè)類型不能直接轉(zhuǎn)換,所以要先將bit(1)先轉(zhuǎn)成 integer 再轉(zhuǎn)成 boolean。下面是一個(gè)可以完成這個(gè)任務(wù)的 PostgreSQL PL/pgSQL 代碼塊。你可以將其作為一個(gè)匿名代碼塊 (DO 語(yǔ)句) 在 psql 或任何 PostgreSQL 客戶端中運(yùn)行。

DO $$
DECLARE
rec RECORD;
table_name TEXT;
column_name TEXT;
alter_sql TEXT;
BEGIN
-- 遍歷數(shù)據(jù)庫(kù)中所有表的模式(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 模式下查找,可以根據(jù)需要更改
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;
-- 構(gòu)造 ALTER TABLE 語(yǔ)句,先轉(zhuǎn)成 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);
-- 執(zhí)行 SQL
EXECUTE alter_sql;
-- 構(gòu)造 ALTER TABLE 語(yǔ)句,再轉(zhuǎn)成 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);
-- 執(zhí)行 SQL
EXECUTE alter_sql;
END LOOP;
RAISE NOTICE '所有 bit(1) 字段轉(zhuǎn)換完成。';
END $$;

到此,SQLite的數(shù)據(jù)已經(jīng)全部遷移到PostgreSql啦~

到此這篇關(guān)于SQLCipher數(shù)據(jù)遷移到PostgreSql詳細(xì)攻略的文章就介紹到這了,更多相關(guān)SQLCipher數(shù)據(jù)遷移到PostgreSql內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • PostgreSQL 字符串處理與日期處理操作

    PostgreSQL 字符串處理與日期處理操作

    這篇文章主要介紹了PostgreSQL 字符串處理與日期處理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • PostgreSql中ALL與ANY區(qū)別小結(jié)

    PostgreSql中ALL與ANY區(qū)別小結(jié)

    ALL和ANY是PostgreSQL中用于與子查詢結(jié)果進(jìn)行比較的強(qiáng)大操作符,本文主要介紹了PostgreSql中ALL與ANY區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • 基于PostgreSQL/openGauss?的分布式數(shù)據(jù)庫(kù)解決方案

    基于PostgreSQL/openGauss?的分布式數(shù)據(jù)庫(kù)解決方案

    ShardingSphere-Proxy?作為透明數(shù)據(jù)庫(kù)代理,用戶無(wú)需關(guān)心?Proxy?如何協(xié)調(diào)背后的數(shù)據(jù)庫(kù)。今天通過(guò)本文給大家介紹基于PostgreSQL/openGauss?的分布式數(shù)據(jù)庫(kù)解決方案,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • PostgreSQL進(jìn)行重置密碼的方法小結(jié)

    PostgreSQL進(jìn)行重置密碼的方法小結(jié)

    今天想測(cè)試一個(gè)PostgresSQL語(yǔ)法的 SQL,但是打開PostgresSQL之后沉默了,密碼是什么?日長(zhǎng)月久的,漸漸就忘記了,于是開始了尋找密碼的道路,所以本文介紹了Postgresql忘記密碼,如何重置密碼,需要的朋友可以參考下
    2024-05-05
  • PostgreSQL模糊匹配走索引的操作

    PostgreSQL模糊匹配走索引的操作

    這篇文章主要介紹了PostgreSQL模糊匹配走索引的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL實(shí)現(xiàn)一個(gè)通用標(biāo)簽系統(tǒng)

    PostgreSQL實(shí)現(xiàn)一個(gè)通用標(biāo)簽系統(tǒng)

    這篇文章主要給大家介紹了關(guān)于利用PostgreSQL實(shí)現(xiàn)一個(gè)通用標(biāo)簽系統(tǒng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • PostgreSQL 安裝部署及配置使用教程

    PostgreSQL 安裝部署及配置使用教程

    PostgreSQL是一個(gè)功能強(qiáng)大的開源對(duì)象關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng),支持 SQL 標(biāo)準(zhǔn)和擴(kuò)展,適合各種規(guī)模應(yīng)用,本文給大家介紹PostgreSQL 安裝部署及配置使用,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 在postgreSQL中運(yùn)行sql腳本和pg_restore命令方式

    在postgreSQL中運(yùn)行sql腳本和pg_restore命令方式

    這篇文章主要介紹了在postgreSQL中運(yùn)行sql腳本和pg_restore命令方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL主從搭建的實(shí)現(xiàn)步驟

    PostgreSQL主從搭建的實(shí)現(xiàn)步驟

    本文主要介紹了一主一從PostgreSQL架構(gòu),配置流復(fù)制賬戶及主從參數(shù)文件,執(zhí)行基礎(chǔ)備份,檢查復(fù)制槽和節(jié)點(diǎn)狀態(tài)以確認(rèn)搭建成功,下面就來(lái)具體介紹一下,感興趣的可以了解一下
    2025-07-07
  • PostgreSQL ROW_NUMBER() OVER()的用法說(shuō)明

    PostgreSQL ROW_NUMBER() OVER()的用法說(shuō)明

    這篇文章主要介紹了PostgreSQL ROW_NUMBER() OVER()的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論

东方市| 高邑县| 宁远县| 肃宁县| 蓬溪县| 房产| 方正县| 鹿邑县| 长宁县| 靖宇县| 长汀县| 宁南县| 志丹县| 芷江| 澎湖县| 呼图壁县| 蓝山县| 东海县| 承德县| 桓仁| 错那县| 镇原县| 新田县| 双鸭山市| 屏东市| 靖远县| 江北区| 南京市| 崇礼县| 灵山县| 清流县| 鄂伦春自治旗| 来宾市| 长兴县| 宝鸡市| 宜都市| 荣成市| 乌什县| 平度市| 北票市| 孟州市|