You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

cordova-sqlite-storage/ionic-native/sqlite能否修改synchronous等pragma配置

核心结论

cordova-sqlite-storage/ionic-native/sqlite 支持修改 page size、synchronous 在内的绝大多数 SQLite PRAGMA 设置,你遇到的 synchronous 配置不生效是执行规则和执行时机的问题,并非不支持修改。

不生效原因说明
  • journal_mode 属于持久化级 PRAGMA,执行修改后会自动写入数据库文件头,后续所有新连接都会沿用修改后的配置,因此单次执行即可长期生效。
  • synchronous 属于会话级 PRAGMA,默认不会持久化到数据库文件,仅在当前数据库连接的生命周期内有效,每次新建数据库连接后都会重置为默认值,你之前的操作大概率是没有在每次打开连接后都重新执行配置,导致看起来没有生效。
  • page_size 属于特殊的初始化级 PRAGMA,仅允许在数据库首次初始化、还未创建任何表/写入任何数据之前修改,数据库完成初始化后再执行修改语句不会生效,需要重建数据库才可以调整。
正确配置方案
  1. 统一在数据库打开成功的回调中执行所有 PRAGMA 配置,确保每次新建连接都能复用统一配置,示例代码如下:
import { SQLite, SQLiteObject } from '@ionic-native/sqlite/ngx';

// 数据库初始化逻辑
this.sqlite.create({
  name: '自定义数据库名.db',
  location: 'default'
})
.then((db: SQLiteObject) => {
  // 连接建立后第一时间执行PRAGMA配置,早于所有业务读写操作
  // 设置synchronous为NORMAL
  db.executeSql('PRAGMA synchronous = 1;', [])
    .catch(e => console.error('设置synchronous失败', e));
  // 开启WAL模式
  db.executeSql('PRAGMA journal_mode = WAL;', [])
    .catch(e => console.error('开启WAL失败', e));
  // 若为全新数据库需要修改page size,必须在建表之前执行
  // db.executeSql('PRAGMA page_size = 4096;', []);

  // 后续再执行建表、业务读写等其他操作
})
.catch(e => console.error('数据库打开失败', e));
  1. 验证配置是否生效:每次设置完成后,执行查询语句确认当前生效值即可
PRAGMA synchronous; -- 返回值为1即代表NORMAL模式已生效
PRAGMA journal_mode; -- 返回值为wal即代表WAL模式已生效
  1. 持久化兼容方案:如果需要降低每次连接重复设置的成本,可以在开启WAL模式并设置synchronous = 1后执行一次VACUUM指令,多数SQLite版本会将该配置和WAL绑定存储,不过为了全版本兼容依然建议每次连接建立后都重新执行配置。

内容的提问来源于stack exchange,提问作者Kaneki Ken

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 22:36:00