gpt4 book ai didi

sqlite - 克隆一个sqlite数据库,跳过一些数据

转载 作者:行者123 更新时间:2023-12-03 15:06:47 24 4
gpt4 key购买 nike

我的应用程序记录用户对sqlite数据库的访问,my.db文件每月增长约5Gb。像“访问”这样的表记录了每个用户的访问,该表应在每月的每个月初清除,并且它几乎包含所有5gb数据。拥有我所有用户的另一个表“用户”,该表应始终保留其数据。

因此,每个月我需要:


ctrl + c-> ctrl + v my.db来克隆文件副本(以供将来统计),这对于5gb文件来说非常慢。
通过“从访问权限中删除”和“真空”清除“访问权限”表,这也需要一些时间。


太慢了我想知道是否存在诸如“导出/导入数据库结构和索引”之类的sql命令,仅将结构克隆到另一个new.db,然后“将*从mydb.user复制到newdb”

也许某些现有工具可以做到这一点?

最佳答案

这是我将使用的示例数据库,代表您的旧数据库。我做了一个要保留的表,一个要丢失的表和一个索引。

$ sqlite3 old.db
sqlite> create table KeepMe (a TEXT);
sqlite> create table DeleteMe (b TEXT);
sqlite> create index DeleteMe_b on DeleteMe(b);
sqlite> insert into KeepMe values("Hello");
sqlite> insert into DeleteMe values("World");
sqlite> .quit


首先将架构复制到新数据库:

$ sqlite3 old.db .schema | sqlite3 new.db


然后打开新数据库, ATTACH到旧数据库,然后复制所需的表:

$ sqlite3 new.db
sqlite> attach "old.db" as old;
sqlite> insert into KeepMe select * from old.KeepMe;
sqlite> .dump
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE KeepMe (a TEXT);
INSERT INTO "KeepMe" VALUES('Hello');
CREATE TABLE DeleteMe (b TEXT);
CREATE INDEX DeleteMe_b on DeleteMe(b);
COMMIT;
sqlite> .quit

关于sqlite - 克隆一个sqlite数据库,跳过一些数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32881176/

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