我希望了解将ATTACH用于具有不同读写权限的数据库的含义.
我有一个场景,我需要访问驻留在只读文件系统中的大型数据库(大约512MB).还有一个小的读写数据库,具有相同的模式,驻留在读写文件系统中.只读数据库提供我的方案中使用的基本数据,其中不常数据更新存储在读写数据库中.
目前,我在单独的连接中打开这两个数据库,维护连接的代码负责向其客户端呈现数据的统一视图.例如,这意味着代码必须合并来自只读和读写数据库等的查询结果.我意识到这种设置不够优雅(并且可能是次优的)并且一直在寻求使用ATTACH命令来创建在SQL而不是C中统一查看数据.
我想知道是否有任何特定的陷阱与附加只读和读写数据库相关,我应该知道.我正在查看以下ATTACH场景之一:
>打开只读数据库作为main,ATTACH读写数据库.这是我的首选解决方案.
>打开读写数据库作为主数据并ATTACH读取只读数据库.
>第三种选择?
一些谷歌查询指出消息表明方案(1)中存在问题.因为我没有找到确定的答案,并且因为我自己使用sqlite 3.6.13的测试没有发现任何问题,所以我发布了这个问题.
感谢您的任何见解.
documentation似乎没有提到将读写数据库附加到只读数据库的任何警告.
因此,我的假设是,您应该发生的事情是,当您打开一个并附加另一个时,也应该发生单独打开的数据库.
我把你的场景1用于测试,它似乎工作正常.这是我尝试过的:
[someone@somewhere tmp]$echo .dump | sqlite3 big_readonly_db PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE foo (a INT); INSERT INTO "foo" VALUES(1); INSERT INTO "foo" VALUES(2); INSERT INTO "foo" VALUES(3); INSERT INTO "foo" VALUES(4); INSERT INTO "foo" VALUES(5); COMMIT; [someone@somewhere tmp]$echo .dump | sqlite3 small_readwrite_db PRAGMA foreign_keys=OFF; BEGIN TRANSACTION; CREATE TABLE bar (a INT); COMMIT; [someone@somewhere tmp]$chmod -w big_readonly_db [someone@somewhere tmp]$ls -l big_readonly_db -r--r--r-- 1 someone someone 2048 Apr 12 21:41 big_readonly_db [someone@somewhere tmp]$sqlite3 big_readonly_db SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> attach database small_readwrite_db as rw; sqlite> insert into bar select * from foo; sqlite> select * from bar; 1 2 3 4 5
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。