我正在使用一个名为架构师的 python 包,它有助于在 Django 模型中使用 Postgres 分区。而且我每个月都设置了分区表。但是在检查约束中,我看到截断的日期正在移动。例如
DATE_TRUNC('month','2020-09-12 15:23:00+05:45')
给2020-09-01 05:45:00+05:45
因此,检查约束变为
CONSTRAINT "transactionservice_transaction_y2020m09_TransactionDate_check" CHECK ("TransactionDate" >= '2020-09-01 05:45:00+05:45'::timestamp with time zone AND "TransactionDate" < '2020-10-01 05:45:00+05:45'::timestamp with time zone)
)
这导致事务位于我不想要2020-9-1 02:03:33
的事务表中。2020-08
我从 pgadmin 尝试了这个,输出就是2020-09-01 00:00:00+05:45
我所不知道的。
但是从架构师包中执行的 sql 代码导致了上述转变。
这是来自架构师的代码部分,它添加了检查约束。
def _get_date_definitions(self):
"""
Returns definitions for date partition subtype.
"""
patterns = {
'day': '"y"YYYY"d"DDD',
'week': '"y"IYYY"w"IW',
'month': '"y"YYYY"m"MM',
'year': '"y"YYYY',
}
try:
pattern = patterns[self.constraint]
except KeyError:
raise PartitionConstraintError(
model=self.model.__name__,
dialect=self.dialect,
current=self.constraint,
allowed=patterns.keys())
return {
'formatters': {'pattern': pattern},
'variables': [
"match := DATE_TRUNC('{constraint}', NEW.{{column}});",
"tablename := '{{parent_table}}_' || TO_CHAR(NEW.{{column}}, '{pattern}');",
"checks := '{{column}} >= ''' || match || ''' AND {{column}} < ''' || (match + INTERVAL '1 {constraint}') || '''';"
]
}
谁能向我解释导致这种转变的原因