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

如何在YugabyteDB中替代实现PostgreSQL的INHERITS命令功能

你提到的直接从零创建新表的方案是完全可行的,针对你的场景有两种落地方式可以选择:

方案1:手动复刻表结构(适配你当前的简单场景)

你的父表ir_actions结构非常简单,手动把父表的所有字段复制到各个子表的定义中即可,唯一需要注意两个适配点:

  • 后续如果父表有字段新增、修改,所有子表要同步做结构变更,保持字段定义一致
  • PostgreSQL继承特性支持直接查询父表返回所有子表的记录,手动分表后如果你的业务逻辑有这类全局查询需求,需要额外用视图模拟该效果

完整适配SQL如下:

-- 父表如果不需要存储独立数据,可以直接删除
CREATE TABLE ir_actions (
  id serial,
  primary key(id)
);

-- 各子表完整复刻父表字段,再补充自身独有字段
CREATE TABLE ir_act_window (
  id serial,
  primary key(id)
);
CREATE TABLE ir_act_report_xml (
  id serial,
  primary key(id)
);
CREATE TABLE ir_act_url (
  id serial,
  primary key(id)
);
CREATE TABLE ir_act_server (
  id serial,
  primary key(id)
);
CREATE TABLE ir_act_client (
  id serial,
  primary key(id)
);

如果需要模拟继承的全局查询效果,可以新增统一视图:

CREATE VIEW ir_actions_all AS
SELECT 'window' AS action_type, id FROM ir_act_window
UNION ALL
SELECT 'report_xml' AS action_type, id FROM ir_act_report_xml
UNION ALL
SELECT 'url' AS action_type, id FROM ir_act_url
UNION ALL
SELECT 'server' AS action_type, id FROM ir_act_server
UNION ALL
SELECT 'client' AS action_type, id FROM ir_act_client;

原来查询ir_actions的逻辑直接替换为查询该视图即可。

方案2:单表加类型标识(适合后续字段扩展的场景)

如果不同子表的差异化字段不多,也可以合并为单表存储,用类型字段区分不同动作类型,改造成本更低:

CREATE TABLE ir_actions (
  id serial,
  action_type VARCHAR(32) NOT NULL, -- 取值对应window、report_xml、url等子表类型
  -- 后续所有子表的独有字段都可在该表新增,非对应类型的记录可留空
  PRIMARY KEY(id)
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:54:02