gpt4 book ai didi

linux - sqlite3 .dump 在转储中插入替换函数(从 3.18 更改为 3.19)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:39:05 25 4
gpt4 key购买 nike

在 sqlite3 中 3.19.3sqlite3 .dumpsqlite3 使用 .mode insert t_objects 生成的转储文件(其中 t_objects 是名称表的)后跟 SELECT * FROM t_objects; 对换行符使用 replace 函数。查看 sqlite3 文件 ext/misc/dbdump.c函数 output_quoted_escaped_string 在第 370 行附近。

但在 sqlite3 3.18 中,行为是按原样输出换行符,我更喜欢这样。

所以对于 3.18,我的转储包含:

 CREATE TABLE t_objects
(ob_id VARCHAR(30) PRIMARY KEY ASC NOT NULL UNIQUE,
ob_mtim REAL NOT NULL,
ob_content TEXT NOT NULL,
ob_paylkind VARCHAR(30) NOT NULL,
ob_paylinit TEXT NOT NULL,
ob_paylcontent TEXT NOT NULL);

随后是

 INSERT INTO t_objects VALUES('_0UsE4ep7mY5_3M6VTOn9Doe',1497676631.12,'
///$c

','named','c','@NAMEDPROXY: __');

但在 3.19.3 中,相同的 INSERT 语句(对于 相同 行内容)变成了

 INSERT INTO t_objects VALUES('_0UsE4ep7mY5_3M6VTOn9Doe',1497676631.1199998855,
replace('\n///$c\n\n','\n',char(10)),'named','c','@NAMEDPROXY: __');

(为了这里的可读性,我在第一行的最后一个逗号后添加了一个换行符;但它不在那里)

这是一个documented改变

Changes carried forward from version 3.19.0 (2017-05-22):

Use replace() instead of char() for escaping newline and carriage-return characters embedded in strings in the .dump output from the command-line shell.

但我不喜欢它(因为我不得不写一个专门的转储程序 dumpsqlmonimelt.cc )

是否有某种方法(例如某些选项或 sqlite3 指令)使用 sqlite 3.19.3 返回转储中旧的 sqlite 3.18 行为和格式。

我问的原因是我实际上将转储保存在 git 中(例如这个 mom_user.sql 文件),sqlite3 转储和恢复由 git pre-commit 完成和 post-merge钩子(Hook)。我真的很喜欢这些换行符按原样出现在转储文件中(这是我选择 sqlite3 的原因之一,因此有一个 git 友好的转储)。

FWIW sqlite3 是来自 Linux/Debian/Sid/x86-64(包版本 3.19.3-3)的那个

附录

sqlite 3.20 可能会改善这个问题(至少对于 .dump)。查看其 release log和我的 sqlite-user message of July 14th

最佳答案

sqlite3 命令行 shell 不被视为 SQLite 库本身的一部分,并且没有 API 稳定性保证。

没有返回 3.18 行为的选项。您必须手动还原该更改,或使用您自己的转储程序。

关于linux - sqlite3 .dump 在转储中插入替换函数(从 3.18 更改为 3.19),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44989176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com