Sqlite错误:表达式树太大(最大深度1000)

时间:2017-03-31 16:05:53

标签: database sqlite backup restore

我正在尝试对格式错误的sqlite文件进行干净的导出导入。

使用techblog.dorogin.com/sqliteexception-datab...中的信息,这就是我所做的sqlite3 oldfile

  1. .mode insert
  2. .output tempfile
  3. .dump
  4. 然后我创建了一个新的sqlite3 newfile

    • .read tempfile

    错误:

    sqlite> .read tempfile
    Error: near line 52330: Expression tree is too large (maximum depth 1000)
    Error: near line 53097: Expression tree is too large (maximum depth 1000)
    Error: near line 53427: Expression tree is too large (maximum depth 1000)
    Error: near line 54013: Expression tree is too large (maximum depth 1000)
    Error: near line 54014: Expression tree is too large (maximum depth 1000)
    Error: near line 54047: Expression tree is too large (maximum depth 1000)
    Error: near line 54048: Expression tree is too large (maximum depth 1000)
    Error: near line 54227: Expression tree is too large (maximum depth 1000)
    Error: near line 54294: Expression tree is too large (maximum depth 1000)
    Error: near line 54373: Expression tree is too large (maximum depth 1000)
    Error: near line 54374: Expression tree is too large (maximum depth 1000)
    Error: near line 56688: Expression tree is too large (maximum depth 1000)
    Error: near line 57950: Expression tree is too large (maximum depth 1000)
    Error: near line 58015: Expression tree is too large (maximum depth 1000)
    Error: near line 58077: Expression tree is too large (maximum depth 1000)
    Error: near line 58246: Expression tree is too large (maximum depth 1000)
    Error: near line 59795: Expression tree is too large (maximum depth 1000)
    Error: near line 60439: Expression tree is too large (maximum depth 1000)
    Error: near line 61501: Expression tree is too large (maximum depth 1000)
    Error: near line 61523: Expression tree is too large (maximum depth 1000)
    Error: near line 61811: Expression tree is too large (maximum depth 1000)
    Error: near line 61824: Expression tree is too large (maximum depth 1000)
    

    在输出文件中,我的最大行数是35737个字符。

    如何解决此错误?

    对于格式错误的sqlite文件进行干净导出导入有哪些解决方案?

1 个答案:

答案 0 :(得分:4)

这是由版本3.18.0 sqlite3中的change引起的:

  

在CLI中“.dump”命令的输出中,使用char()函数引用换行符和回车符,这样它们就不会被操作系统中的行尾处理逻辑吃掉或者在其他命令行实用程序和/或库中。

如果单个字符串值中的换行符太多,则生成的SQL表达式会变得太复杂。

版本fixed中的3.19.0。 如果您仍在使用3.18.0,则可以通过将文件转换为使用原始换行来解决此问题:

sed -e "s/'||char(10)||'/\\n/g" < tempfile > tempfile_with_newlines