Pass unquoted schema.name to partman.create_parent

pg_partman 5.x splits p_parent_table on '.' and looks up the parts as
raw identifiers, so the literal must be 'schema.name' rather than the
double-quoted form quoteLiteral emits for .table.
This commit is contained in:
Mike Reeves
2026-04-17 15:22:57 -04:00
parent 927eba566c
commit 0fddcd8fe7
+6 -1
View File
@@ -110,9 +110,14 @@
# 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."
create_templates = [
'''CREATE TABLE {{ .table }} ({{ .columns }}) PARTITION BY RANGE ("time")''',
'''SELECT partman.create_parent(p_parent_table := {{ .table|quoteLiteral }}, p_control := 'time', p_type := 'range', p_interval := '1 day', p_premake := 3)'''
'''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 %}
{%- endif %}