Mark time column NOT NULL before partman.create_parent

pg_partman 5.x requires the control column to be NOT NULL; Telegraf's
generated columns are nullable by default.
This commit is contained in:
Mike Reeves
2026-04-17 15:27:06 -04:00
parent 0fddcd8fe7
commit f11e9da83a
+5 -5
View File
@@ -110,13 +110,13 @@
# Every metric table is a daily time-range partitioned parent managed by
# pg_partman. Retention drops old partitions instead of row-by-row DELETEs.
{% raw %}
# pg_partman.create_parent() splits p_parent_table on '.' and looks the
# parts up as raw identifiers, so the string literal must be
# 'schema.name', NOT '"schema"."name"'. {{ .table|quoteLiteral }} would
# emit the double-quoted form and partman fails with "Unable to find
# given parent table in system catalogs."
# pg_partman 5.x requires the control column (time) to be NOT NULL, so
# ALTER it before create_parent(). And create_parent() splits
# p_parent_table on '.' to look up raw identifiers, so the literal must
# be 'schema.name' (not '"schema"."name"' as .table|quoteLiteral emits).
create_templates = [
'''CREATE TABLE {{ .table }} ({{ .columns }}) PARTITION BY RANGE ("time")''',
'''ALTER TABLE {{ .table }} ALTER COLUMN "time" SET NOT NULL''',
'''SELECT partman.create_parent(p_parent_table := {{ printf "%s.%s" .table.Schema .table.Name | quoteLiteral }}, p_control := 'time', p_type := 'range', p_interval := '1 day', p_premake := 3)'''
]
{% endraw %}