gpt4 book ai didi

sqlite - 如何使 .sqliterc 命令安静

转载 作者:IT王子 更新时间:2023-10-29 06:19:37 24 4
gpt4 key购买 nike

sqlite3 的 .sqliterc 文件主要用于 .this.that 风格的点命令,就像曾经流行的mysql输出模拟:

.header on
.timer on
.mode column

但是,您可以将任何您想要的 SQL 放入 .sqliterc。一旦你意识到 sqlite3 在默认情况下处理大型数据集时有多慢,你就会学习一些 PRAGMA 命令,这些命令可以让生活变得更好,比如 PRAGMA synchronous =关闭;

这些命令也可以放在您的 .sqliterc 中,如果您了解这些命令,那么将影响您使用命令行“sqlite3”工具所做的一切,无论是哪个数据库!就我而言,这很好。对于我在特定机器上使用的 Linux 帐户,我一直想要其中的一些 PRAGMA 设置。

但是,某些 PRAGMA 设置会产生确认输出,例如 yesoffexclusivememory。当你做这样的事情时,这就成了一个问题,输出的那些额外的小词会被默默地包含在内:

echo "select * from blah;" | sqlite3 foo.db > output.txt
echo "select * from blah;" | sqlite3 foo.db | wc -l

如果您碰巧在 .sqliterc 中有 5 个 PRAGMA 语句,其中 2 个产生输出,则第二个示例 (wc -l) 中的行数将减少 2,并且您的数据output.txt 中的内容并不完全符合您的预期。顺便说一下,那些额外的 2 行转到 stdout,而不是 stderr

详细说明,使用包含以下内容的 .sqliterc 文件:

PRAGMA synchronous = OFF;
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = MEMORY;
PRAGMA locking_mode = EXCLUSIVE;
PRAGMA cache_size = -500000;

一切正常,但你会得到这样的 SELECT 输出:

off
memory
2904|wan|1417737600|772|108243|0|1946|635589|0
2904|wan|1417737900|765|119478|0|1980|647472|0
2904|wan|1417738200|708|90934|0|1924|622615|0
2904|wan|1417738500|710|105128|0|1914|622634|0

而不是你想要的:

2904|wan|1417737600|772|108243|0|1946|635589|0
2904|wan|1417737900|765|119478|0|1980|647472|0
2904|wan|1417738200|708|90934|0|1924|622615|0
2904|wan|1417738500|710|105128|0|1914|622634|0

看出区别了吗?问题是:我们能否以某种方式让 .sqliterc 命令关闭,并停止打印某些污染我们的 stdoutPRAGMA 命令的结果?

最佳答案

答案是肯定的!至少这是我找到的最好的方法。

警告!这有点 hackish,并且隐藏了一些提醒“警告”,如果您首先执行将 PRAGMA 命令放入 .sqliterc 的非推荐做法,您可能会看到!

侧边栏:研究这个时,您可能会被 .echo on.echo off 误导,但这并不能满足我们的要求。 Echo 默认是关闭的,没关系。 .echo 设置留给读者作为练习。

答案:使用 .output 设置。将 /dev/null 设置为所有命令的输出,然后在最后将输出设置回默认的 stdout。 (或者使用 /tmp/somefile 或任何你想要的,如果你想要一些你垃圾的记录。)

修复了 .sqliterc 文件:

.output /dev/null
PRAGMA synchronous = OFF;
PRAGMA foreign_keys = ON;
PRAGMA journal_mode = MEMORY;
PRAGMA locking_mode = EXCLUSIVE;
PRAGMA cache_size = -500000;
.output stdout

现在您可以在输出“包装器”中包装任意数量的 .dotPRAGMA 命令,并且您永远不会被它们无法控制的冗长所困扰!

附言作为奖励,你现在有我推荐的 5 条使用 sqlite3 的性能 PRAGMA 行,带有 Improve INSERT-per-second performance of SQLite? 的属性。 . (我的有 500 MB 缓存大小;调味。)

关于sqlite - 如何使 .sqliterc 命令安静,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27391557/

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