目前有两个数据库表,分别是
这两个表中都有数据。其中,sessionaccountingdailysplit表与sessionaccounting表之间存在外键(FK)约束。
我需要将这两个表进行分区,以使最终的结构如下所示:
我执行了以下步骤来完成上述操作:
现在,问题来了。如果会话时间为2009-12-31至2010-01-01,那么就会出现以下问题。由于sessionaccounting行位于
我需要帮助制定一条规则或触发器,即使数据的日期是2010,也要将其插入到
有什么帮助可以解决这个问题吗?
sessionaccounting
和 sessionaccountingdailysplit
。这两个表中都有数据。其中,sessionaccountingdailysplit表与sessionaccounting表之间存在外键(FK)约束。
我需要将这两个表进行分区,以使最终的结构如下所示:
sessionaccounting sessionaccounting2007 sessionaccounting2008 sessionaccounting2009 sessionaccounting2010 sessionaccounting2011 sessionaccounting2012 sessionaccountingdailysplit sessionaccountingdailysplit2009 sessionaccountingdailysplit2010 sessionaccountingdailysplit2011 sessionaccountingdailysplit2012sessionaccountingdailysplit从2009开始的原因是该表在那一年被创建。
我执行了以下步骤来完成上述操作:
- 根据starttime为sessionaccounting创建分区。
- 根据日期为sessionaccountingdailysplit创建分区。
- 创建约束:
CONSTRAINT sessionaccountingdailysplit2009_sessionaccountingid_fkey FOREIGN KEY (sessionaccountingid) REFERENCES sessionaccounting2009 (id) MATCH SIMPLE
现在,问题来了。如果会话时间为2009-12-31至2010-01-01,那么就会出现以下问题。由于sessionaccounting行位于
sessionaccounting2009
中,因此FK将按照sessionaccountingdailysplit2009
的方式工作,并且该表中的FK指向sessionaccounting2009
。但是,当Postgres尝试将新行插入到sessionaccountingdailysplit2010
中时,它找不到与sessionaccounting2010
匹配的FK,因为它在sessionaccounting2009
中。我需要帮助制定一条规则或触发器,即使数据的日期是2010,也要将其插入到
sessionaccountingdailysplit2009
中。因此,需要将数据插入到与sessionaccounting行所在表相对应的sessionaccountingdailysplit
表中,以避免违反FK约束。
这是否可能?
一个视觉示例
sessionaccounting2009 1,starttime:2009-12-31,endtime:2010
我想要的
sessionaccountingdailysplit2009 1,date:2009-12-31 2,date:2010-01-01
我得到的(这违反了2010年的FK)
sessionaccountingdailysplit2009 1,date:2009-12-31
sessionaccountingdailysplit2010 1,date:2010-01-01
插入数据时我使用的规则却导致了问题
CREATE OR REPLACE RULE sessionaccountingdailysplit2009_insert AS
ON INSERT TO sessionaccountingdailysplit
WHERE new.date >= '2009-01-01 00:00:00+02'::timestamp with time zone
AND new.date < '2010-01-01 00:00:00+02'::timestamp with time zone
DO INSTEAD
INSERT INTO sessionaccountingdailysplit2009
(id, sessionaccountingid, date, inputoctets
, outputoctets, privcreditsused, usercreditsused)
VALUES (new.id, new.sessionaccountingid, new.date, new.inputoctets
,new.outputoctets, new.privcreditsused, new.usercreditsused
)
;
有什么帮助可以解决这个问题吗?