- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是一名经验丰富的程序员,但这是我的第一个 MacOS 应用程序(在 10.15.2 上),它需要读取用户选择的 sqlite 数据库(可能在机器上的任何地方)
起初它不会自己打开数据库“name.sqlite”文件;但是当我使用 NSOpenPanel 让用户选择它时,它起作用了。
但随后查询失败,因为 sqlite3(通过 SQLite.swift)试图打开 'name.sqlite-wal'
os_unix.c:43353: (0) open(/path/to/dbname.lrcat-wal) - 未定义错误:0
如果我使用命令行客户端和 pragma journal-mode=off
打开数据库,那么应用程序可以正常工作,但我不能基于此限制应用程序 - 大多数dbs 有 WAL 日志记录
我尝试在 app.entitlements 中将 com.apple.security.app-sandbox
设为 false,但这没有帮助。
我尝试将数据库移动到 Pictures 文件夹并将 com.apple.security.assets.pictures.read-write
设为 true,但这没有帮助。
db 和包含文件夹(在我的测试中为/tmp)的 unix 权限都很好。
因为允许用户通过 NSOpenPanel 选择数据库允许我打开数据库进行读取,我假设在创建用于写入的“-wal”文件时也有类似的限制。
我怎样才能获得在数据库旁边创建文件的权限(最好不要打扰用户了解 wal 文件的详细信息)?
编辑:按照 TheNextMan 关于 sidecar 文件的建议,我再次搜索。他(猜代词) 链接的 WWDC 演示文稿展示了如何使用 CFBundleDocumentTypes
将额外的扩展与 NSIsRelatedItemType
for NSFilePresenter
相关联>,但是(据我所知)我不会走那条路。我试过了,但没用
我还使用“sidecar”搜索词找到了 Access sidecar files in a Mac sandboxed app ,这看起来不错,但没有帮助。
更好的是,我找到了我的问题的四年未回答的副本(如果我有足够的代表,我会将其标记为重复),SQLite and Sandboxed OSX apps ,其中引用了 Apple 文档 App Sandbox Design Guide , 说
Note: In the case of a SQLite journal file, beginning in 10.8.2, journal files, write-ahead logging files, and shared memory files are automatically added to the related items list if you open a SQLite database, so this step is unnecessary.
显然它应该 Just Work™。但事实并非如此。
最佳答案
感谢您提出这个彻底的问题。我今天遇到了和你一样的问题,与 macOS 沙盒限制作斗争。与您类似,我已经将用户选择的 (NSOpenPanel
) 数据库复制到我的应用程序临时文件夹 (FileManager.default.temporaryDirectory
)。
但我仍然无法查询数据库文件:sqlite3_prepare_v2
总是返回 os_unix.c:45340: (0) open(/var/folders/.../myDB.db-wal ) - 未定义错误:0
消息。
由于数据库已经位于临时文件夹中,我们的应用程序绝对可以写入该文件夹(因为我们复制了数据库文件!),我们可以简单地自己创建 myDB.db-wal
文件:
let tmpLocation = /// URL of the SQLite *.db file in a writable directory
let walLocation = tmpLocation.deletingPathExtension().appendingPathExtension("db-wal")
try Data().write(to: walLocation)
Et voilà:正在打开数据库。
关于swift - 如何授予我的 MacOS 应用程序创建 "WAL"文件的权限,以使用 journal-mode=WAL 打开 SQLite 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59395521/
现状 所以我在运行 Postgres 的数据记录计算机上将 WAL 归档设置为独立的内部硬盘驱动器。包含 WAL 存档的硬盘驱动器已满,我想删除所有 WAL 存档文件并将其存档到外部备份驱动器,包括初
SQLite 文档说 ( here ) 您可以通过在单独的线程上运行检查点来避免 WAL 模式下的检查点暂停。我尝试了这个,但它似乎没有工作:'-wal' 文件无限增长,不清楚是否有任何东西实际上被复
请耐心等待 - 我将尝试在这个问题中使用正确的术语。我有一个 iOS 应用程序,多年来允许用户创建其 Core Data 支持的 .sqlite 数据库的备份。出于某种原因,很久以前,我将 Journ
我正在尝试将 Barman 配置为备份。当我执行 barman check replica 时,我不断得到: Server replica: WAL archive: FAILED (please m
所以,我一直在使用 MagicalRecord 开发 iPad 应用程序,最近在转移到自动迁移商店后我遇到了一些问题。我需要将我的 .db 文件从一个设备同步到另一个设备,所以我需要所有数据都在 .d
我是一名经验丰富的程序员,但这是我的第一个 MacOS 应用程序(在 10.15.2 上),它需要读取用户选择的 sqlite 数据库(可能在机器上的任何地方) 起初它不会自己打开数据库“name.s
我正在连续写入具有 PRAGMA journal_mode=WAL、PRAGMA journal_size_limit=0 的 db 文件。我的 C++ 程序有两个线程,一个读取器(每隔 15 秒查询
在 WAL 的原始文档中,清楚地说明了 FULL 和 NORMAL 同步之间的区别 1 : Write transactions are very fast since they only invol
我有一个应用程序的 apk,它与 Android 9 不兼容,因为它现在强制使用 WAL 而不是日志模式。有没有办法在不访问应用程序源代码的情况下禁用 WAL? 最佳答案 如果您无法控制应用程序的来源
在 postgresql 中,如何创建 WAL archieve?Backup 和 Restore 有分步说明使用 Linux 或 shell 命令? 环境: 操作系统:Linux RHEL 7.4
在流式复制中,是否有 WAL 传送优先级(现在或将来的版本)这样的概念,您可以在其中设置事务影响到达备用服务器的速度的优先级? 假设我要执行一个非关键更新,它会添加 2GB 的 WAL 文件。如果那
我一直在研究 Postgresql 中的崩溃恢复机制,这让我大吃一惊。在 WAL 日志记录中,在事务开始时,基于查询,WAL 缓冲区被 XLOG 记录填充。在事务提交时,WAL 缓冲区被刷新。现在,假
其实我正在使用WAL文件来设计一个复制工具,我需要知道是否有任何方法可以获取特定事务id(xid)中执行的sql语句 这是我在处理 pg_xlog 目录中的 WAL 文件时获得的信息 block ..
这或多或少是一个简单的是或否问题... 我可以同时将 PostgrSQL 配置为 WAL 到阿尔卑斯山某处的瑞士洞穴和本地 WAL 吗? 如果是,您能否设置一些软时间目标,即在将提交刷新到山中之前,可
使用 tarantool,为什么我要记录这些奇怪的消息: 2016-03-24 16:19:58.987 [5803] main/493623/http/XXX.XXX.XXX.XXX:57295 t
我想从 mac 应用导出我的 shazamed 标签。该应用程序不提供任何导出选项。Shazam for Mac 将它们存储在 sqlite 3 数据库中。 该应用正在生成 3 个文件: Shazam
我有以下代码 int main(){ sqlite3 *db; int rc; char filename[512]; char query[512]; char trace_string[5
WAL(Write-Ahead Log)技术已经在很多系统中使用。 WAL 的机制是,当客户端写入数据时,系统会做两件事: 写个 日志到磁盘并返回给客户端 写下 数据异步到磁盘、缓存或内存 有两个好处
我是 Hawk model indexing 的开发者之一工具。我们的工具将 XMI 模型索引到图表中,以加快后续查询的速度,并且需要在“批量插入”和“事务更新”模式之间来回切换。当我们第一次注意到目
我想知道是否有一种方法可以更简单地从 WAL 日志中读取事务。我想要交易而不是二进制数据。我使用了 pg_xlogdump 但我不知道如何从看起来像这样的结果中获取交易 rmgr: Btree
我是一名优秀的程序员,十分优秀!