QGIS中如何跟踪GeoPackage属性表记录的创建与修改时间?
QGIS中GeoPackage属性表自动跟踪创建/修改时间的方法
创建时间字段设置
- 打开目标图层的属性表,点击顶部的「字段编辑」按钮(铅笔图标)进入编辑模式
- 点击「添加字段」,设置字段名(比如
create_time),类型选择「日期时间」,勾选「允许NULL值」,在「默认值」框中输入CURRENT_TIMESTAMP,保存字段设置 - 新增记录时,该字段会自动填充当前时间;已存在的旧记录可通过字段计算器的
now()函数批量补填一次
修改时间字段设置(QGIS内置简便方法)
仅适用于QGIS 3.16及以上版本:
- 同样进入字段编辑模式,添加字段(比如
update_time),类型选择「日期时间」 - 勾选字段设置里的「自动更新」选项,在「默认值」框中输入
CURRENT_TIMESTAMP,保存设置 - 后续修改任意记录的属性时,
update_time会自动更新为当前操作时间
跨工具通用方法:GeoPackage数据库触发器
如果需要在其他软件操作GeoPackage时也能自动更新时间,可通过SQL触发器实现:
- 打开QGIS的「DB Manager」,找到目标GeoPackage,展开到对应图层
- 切换到「SQL」标签,执行以下SQL语句(替换
your_layer_name、create_time、update_time为实际名称):- 先创建字段(如果还没添加):
ALTER TABLE your_layer_name ADD COLUMN create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP; ALTER TABLE your_layer_name ADD COLUMN update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP; - 添加创建时间触发器(确保新增记录自动赋值,防止手动修改):
CREATE TRIGGER set_create_time BEFORE INSERT ON your_layer_name FOR EACH ROW WHEN NEW.create_time IS NULL BEGIN SET NEW.create_time = CURRENT_TIMESTAMP; END; - 添加修改时间触发器(每次更新记录时自动刷新):
CREATE TRIGGER set_update_time BEFORE UPDATE ON your_layer_name FOR EACH ROW BEGIN SET NEW.update_time = CURRENT_TIMESTAMP; END;
- 先创建字段(如果还没添加):
- 执行完成后,无论用QGIS还是其他支持GeoPackage的工具修改记录,时间字段都会自动更新
内容的提问来源于stack exchange,提问作者user24491462
相关产品推荐
相关产品推荐

