如何获取PostgreSQL中表的唯一固定ID值
为PostgreSQL表生成唯一固定数字ID的方案
方案一:纯查询实现(无需新建表)
利用窗口函数结合固定排序规则生成ID,只要表名和过滤条件不变,ID就会保持固定。适合临时需求或表名不会变更的场景:
SELECT dense_rank() OVER (ORDER BY table_name) AS id, table_name FROM information_schema.tables WHERE table_schema = 'public' -- 替换为你的目标schema AND table_name IN ('t_aa', 't_bb', 't_cc'); -- 按需过滤目标表
注意:如果后续修改表名,对应的ID会随之变化;若新增表,需调整过滤条件保证ID稳定性。
方案二:新建映射表实现(稳定可控,推荐用于advisory lock)
因为advisory lock密钥需要长期固定,避免元数据变化导致锁逻辑混乱,建议新建专门的映射表存储ID与表名的对应关系:
- 创建映射表:
CREATE TABLE table_lock_ids ( id INTEGER PRIMARY KEY, table_name VARCHAR(64) UNIQUE NOT NULL );
- 插入固定的ID与表名映射:
INSERT INTO table_lock_ids (id, table_name) VALUES (1, 't_aa'), (2, 't_bb'), (3, 't_cc');
- 查询获取ID:
SELECT id, table_name FROM table_lock_ids;
这种方式完全由你控制ID分配,不会受系统元数据变更(如表名修改、系统升级)影响,是作为advisory lock密钥的最优选择。
内容的提问来源于stack exchange,提问作者user15397083
相关产品推荐
相关产品推荐

