2017-07-08 24 views
0

在sqlite3的3.19.3通過sqlite3 .dump或通過sqlite3.mode insert t_objects(其中t_objects是一個表的名稱),隨後SELECT * FROM t_objects;產生的轉儲文件使用replace功能換行符。請參閱sqlite3文件ext/misc/dbdump.c函數output_quoted_escaped_string附近的行370.sqlite3的使用.dump插入替換功能在轉儲(從3.18到3.19變化)

但在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變化

變化從版本3.19.0(2017年5月22日)結轉:)

使用替代(而不是CHAR( ),用於從命令行shell輸出.dump中的字符串中嵌入換行符和回車符。

但我不喜歡它(因爲我不得不寫一個專門傾銷程序dumpsqlmonimelt.cc

是否有某種方式(例如,一些選項或sqlite3指令)取回,使用,SQLite的3.19.3,即舊的sqlite 3.18行爲和轉儲格式。

我問的原因是,我居然保持git的是轉儲(例如本mom_user.sql文件)與sqlite3轉儲和恢復的混帳pre-commitpost-merge鉤來完成。我真的很喜歡這些新行字符顯示爲-是轉儲文件(這是我的原因之一選擇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

回答

1

sqlite3命令行shell不被認爲是SQLite庫本身的一部分,並且沒有API穩定性保證。

沒有選項回到3.18行爲。您必須手動還原該更改,或使用您自己的傾銷程序。