Skip to content

Commit c720a33

Browse files
pavanmanishddpage
authored andcommitted
Add toast_tuple_target to the Materialized View dialog (pgadmin-org#9626)
Exposes the PostgreSQL 11+ TOAST_TUPLE_TARGET storage parameter in the Materialized View properties dialog, mirroring the existing FILLFACTOR support: an integer field (128-8160) in the Definition group, extracted from reloptions in properties.sql, emitted in the CREATE ... WITH clause, and SET/RESET on edit. The recreate-on-definition-change path preserves the value. The dialog field and SQL are applied to the version buckets that supported servers actually resolve to. The original change only touched the legacy default/ bucket (PG < 12), so it had no effect on any supported server (13-18, which resolve to 13_plus/15_plus); the create/properties/update templates are now updated in the 12_plus, 13_plus and 15_plus buckets too. Template output is byte-identical to the previous SQL when toast_tuple_target is unset. Adds a 9.16 release note.
1 parent f9b9bc9 commit c720a33

14 files changed

Lines changed: 123 additions & 21 deletions

File tree

docs/en_US/release_notes_9_16.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Bundled PostgreSQL Utilities
2020
New features
2121
************
2222

23+
| `Issue #9626 <https://github.com/pgadmin-org/pgadmin4/issues/9626>`_ - Add support for the TOAST tuple target storage parameter in the Materialized View dialog.
2324
| `Issue #9699 <https://github.com/pgadmin-org/pgadmin4/issues/9699>`_ - Add support for closing a tab with a middle-click on its title.
2425
2526
Housekeeping

web/pgadmin/browser/server_groups/servers/databases/schemas/views/static/js/mview.ui.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ export default class MViewSchema extends BaseUISchema {
106106
id: 'fillfactor', label: gettext('Fill factor'),
107107
group: gettext('Definition'), mode: ['edit', 'create'],
108108
noEmpty: false, type: 'int', controlProps: {min: 10, max: 100}
109+
},{
110+
id: 'toast_tuple_target', label: gettext('Toast tuple target'),
111+
group: gettext('Definition'), mode: ['edit', 'create'],
112+
noEmpty: false, type: 'int', controlProps: {min: 128, max: 8160},
113+
min_version: 110000,
109114
},
110115
{
111116
id: 'dependsonextensions',

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/12_plus/sql/create.sql

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ USING {{data.amname}}
1212
{% elif not data.default_amname and data.amname %}
1313
USING {{data.amname}}
1414
{% endif %}
15-
{% if(data.fillfactor or data.autovacuum_enabled in ('t', 'f') or data.toast_autovacuum_enabled in ('t', 'f') or data['vacuum_data']|length > 0) %}
15+
{% if(data.fillfactor or data.toast_tuple_target or data.autovacuum_enabled in ('t', 'f') or data.toast_autovacuum_enabled in ('t', 'f') or data['vacuum_data']|length > 0) %}
1616
{% set ns = namespace(add_comma=false) %}
1717
WITH (
1818
{% if data.fillfactor %}
19-
FILLFACTOR = {{ data.fillfactor }}{% set ns.add_comma = true%}{% endif %}{% if data.autovacuum_enabled in ('t', 'f') %}
19+
FILLFACTOR = {{ data.fillfactor }}{% set ns.add_comma = true%}{% endif %}{% if data.toast_tuple_target %}
20+
{% if ns.add_comma %},
21+
{% endif %} TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}{% set ns.add_comma = true%}{% endif %}{% if data.autovacuum_enabled in ('t', 'f') %}
2022
{% if ns.add_comma %},
2123
{% endif %}
2224
autovacuum_enabled = {% if data.autovacuum_enabled == 't' %}TRUE{% else %}FALSE{% endif %}{% set ns.add_comma = true%}{% endif %}{% if data.toast_autovacuum_enabled in ('t', 'f') %}

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/12_plus/sql/properties.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ SELECT
2626
(SELECT pg_catalog.array_agg(provider || '=' || label) FROM pg_catalog.pg_seclabels sl1 WHERE sl1.objoid=c.oid AND sl1.objsubid=0) AS seclabels,
2727
substring(pg_catalog.array_to_string(c.reloptions, ',')
2828
FROM 'fillfactor=([0-9]*)') AS fillfactor,
29+
substring(pg_catalog.array_to_string(c.reloptions, ',')
30+
FROM 'toast_tuple_target=([0-9]*)') AS toast_tuple_target,
2931
(substring(pg_catalog.array_to_string(c.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)'))::BOOL AS autovacuum_enabled,
3032
substring(pg_catalog.array_to_string(c.reloptions, ',')
3133
FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS autovacuum_vacuum_threshold,

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/12_plus/sql/update.sql

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,17 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS {{ conn|qtIdent(view_schema, view_name) }
3030
{% if data.amname and data.amname != o_data.amname %}
3131
USING {{ data.amname }}
3232
{% endif %}
33-
{% if data.fillfactor or o_data.fillfactor %}
33+
{% if data.fillfactor or o_data.fillfactor or data.toast_tuple_target or o_data.toast_tuple_target %}
3434
WITH(
3535
{% if data.fillfactor %}
36-
FILLFACTOR = {{ data.fillfactor }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
36+
FILLFACTOR = {{ data.fillfactor }}{% if data.toast_tuple_target or o_data.toast_tuple_target or (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
3737
{% elif o_data.fillfactor %}
38-
FILLFACTOR = {{ o_data.fillfactor }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
38+
FILLFACTOR = {{ o_data.fillfactor }}{% if data.toast_tuple_target or o_data.toast_tuple_target or (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
39+
{% endif %}
40+
{% if data.toast_tuple_target %}
41+
TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
42+
{% elif o_data.toast_tuple_target %}
43+
TOAST_TUPLE_TARGET = {{ o_data.toast_tuple_target }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
3944
{% endif %}
4045

4146
{% if data['vacuum_data']['changed']|length > 0 %}
@@ -82,6 +87,20 @@ RESET(
8287
FILLFACTOR
8388
);
8489

90+
{% endif %}
91+
{# ======= SET/RESET Toast Tuple Target ========= #}
92+
{% if data.toast_tuple_target and o_data.toast_tuple_target != data.toast_tuple_target %}
93+
ALTER MATERIALIZED VIEW IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
94+
SET(
95+
TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}
96+
);
97+
98+
{% elif (data.toast_tuple_target == '' or data.toast_tuple_target == None) and data.toast_tuple_target != o_data.toast_tuple_target %}
99+
ALTER MATERIALIZED VIEW IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
100+
RESET(
101+
TOAST_TUPLE_TARGET
102+
);
103+
85104
{% endif %}
86105
{# ===== Check for with_data property ===== #}
87106
{% if data.with_data is defined and o_data.with_data|lower != data.with_data|lower %}

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/13_plus/sql/create.sql

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ USING {{data.amname}}
1212
{% elif not data.default_amname and data.amname %}
1313
USING {{data.amname}}
1414
{% endif %}
15-
{% if(data.fillfactor or data.autovacuum_enabled in ('t', 'f') or data.toast_autovacuum_enabled in ('t', 'f') or data['vacuum_data']|length > 0) %}
15+
{% if(data.fillfactor or data.toast_tuple_target or data.autovacuum_enabled in ('t', 'f') or data.toast_autovacuum_enabled in ('t', 'f') or data['vacuum_data']|length > 0) %}
1616
{% set ns = namespace(add_comma=false) %}
1717
WITH (
1818
{% if data.fillfactor %}
19-
FILLFACTOR = {{ data.fillfactor }}{% set ns.add_comma = true%}{% endif %}{% if data.autovacuum_enabled in ('t', 'f') %}
19+
FILLFACTOR = {{ data.fillfactor }}{% set ns.add_comma = true%}{% endif %}{% if data.toast_tuple_target %}
20+
{% if ns.add_comma %},
21+
{% endif %} TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}{% set ns.add_comma = true%}{% endif %}{% if data.autovacuum_enabled in ('t', 'f') %}
2022
{% if ns.add_comma %},
2123
{% endif %}
2224
autovacuum_enabled = {% if data.autovacuum_enabled == 't' %}TRUE{% else %}FALSE{% endif %}{% set ns.add_comma = true%}{% endif %}{% if data.toast_autovacuum_enabled in ('t', 'f') %}

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/13_plus/sql/properties.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ SELECT
3232
(SELECT pg_catalog.array_agg(provider || '=' || label) FROM pg_catalog.pg_seclabels sl1 WHERE sl1.objoid=c.oid AND sl1.objsubid=0) AS seclabels,
3333
substring(pg_catalog.array_to_string(c.reloptions, ',')
3434
FROM 'fillfactor=([0-9]*)') AS fillfactor,
35+
substring(pg_catalog.array_to_string(c.reloptions, ',')
36+
FROM 'toast_tuple_target=([0-9]*)') AS toast_tuple_target,
3537
(substring(pg_catalog.array_to_string(c.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)'))::BOOL AS autovacuum_enabled,
3638
substring(pg_catalog.array_to_string(c.reloptions, ',')
3739
FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS autovacuum_vacuum_threshold,

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/13_plus/sql/update.sql

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,17 @@ CREATE MATERIALIZED VIEW IF NOT EXISTS {{ conn|qtIdent(view_schema, view_name) }
3030
{% if data.amname and data.amname != o_data.amname %}
3131
USING {{ data.amname }}
3232
{% endif %}
33-
{% if data.fillfactor or o_data.fillfactor %}
33+
{% if data.fillfactor or o_data.fillfactor or data.toast_tuple_target or o_data.toast_tuple_target %}
3434
WITH(
3535
{% if data.fillfactor %}
36-
FILLFACTOR = {{ data.fillfactor }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
36+
FILLFACTOR = {{ data.fillfactor }}{% if data.toast_tuple_target or o_data.toast_tuple_target or (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
3737
{% elif o_data.fillfactor %}
38-
FILLFACTOR = {{ o_data.fillfactor }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
38+
FILLFACTOR = {{ o_data.fillfactor }}{% if data.toast_tuple_target or o_data.toast_tuple_target or (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
39+
{% endif %}
40+
{% if data.toast_tuple_target %}
41+
TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
42+
{% elif o_data.toast_tuple_target %}
43+
TOAST_TUPLE_TARGET = {{ o_data.toast_tuple_target }}{% if (data['vacuum_data'] is defined and data['vacuum_data']['changed']|length > 0) %},{% endif %}
3944
{% endif %}
4045

4146
{% if data['vacuum_data']['changed']|length > 0 %}
@@ -82,6 +87,20 @@ RESET(
8287
FILLFACTOR
8388
);
8489

90+
{% endif %}
91+
{# ======= SET/RESET Toast Tuple Target ========= #}
92+
{% if data.toast_tuple_target and o_data.toast_tuple_target != data.toast_tuple_target %}
93+
ALTER MATERIALIZED VIEW IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
94+
SET(
95+
TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}
96+
);
97+
98+
{% elif (data.toast_tuple_target == '' or data.toast_tuple_target == None) and data.toast_tuple_target != o_data.toast_tuple_target %}
99+
ALTER MATERIALIZED VIEW IF EXISTS {{ conn|qtIdent(view_schema, view_name) }}
100+
RESET(
101+
TOAST_TUPLE_TARGET
102+
);
103+
85104
{% endif %}
86105
{# ===== Check for with_data property ===== #}
87106
{% if data.with_data is defined and o_data.with_data|lower != data.with_data|lower %}

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/15_plus/sql/create.sql

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,13 @@ USING {{data.amname}}
1212
{% elif not data.default_amname and data.amname %}
1313
USING {{data.amname}}
1414
{% endif %}
15-
{% if(data.fillfactor or data.autovacuum_enabled in ('t', 'f') or data.toast_autovacuum_enabled in ('t', 'f') or data['vacuum_data']|length > 0) %}
15+
{% if(data.fillfactor or data.toast_tuple_target or data.autovacuum_enabled in ('t', 'f') or data.toast_autovacuum_enabled in ('t', 'f') or data['vacuum_data']|length > 0) %}
1616
{% set ns = namespace(add_comma=false) %}
1717
WITH (
1818
{% if data.fillfactor %}
19-
FILLFACTOR = {{ data.fillfactor }}{% set ns.add_comma = true%}{% endif %}{% if data.autovacuum_enabled in ('t', 'f') %}
19+
FILLFACTOR = {{ data.fillfactor }}{% set ns.add_comma = true%}{% endif %}{% if data.toast_tuple_target %}
20+
{% if ns.add_comma %},
21+
{% endif %} TOAST_TUPLE_TARGET = {{ data.toast_tuple_target }}{% set ns.add_comma = true%}{% endif %}{% if data.autovacuum_enabled in ('t', 'f') %}
2022
{% if ns.add_comma %},
2123
{% endif %}
2224
autovacuum_enabled = {% if data.autovacuum_enabled == 't' %}TRUE{% else %}FALSE{% endif %}{% set ns.add_comma = true%}{% endif %}{% if data.toast_autovacuum_enabled in ('t', 'f') %}

web/pgadmin/browser/server_groups/servers/databases/schemas/views/templates/mviews/pg/15_plus/sql/properties.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ SELECT
3232
(SELECT pg_catalog.array_agg(provider || '=' || label) FROM pg_catalog.pg_seclabels sl1 WHERE sl1.objoid=c.oid AND sl1.objsubid=0) AS seclabels,
3333
substring(pg_catalog.array_to_string(c.reloptions, ',')
3434
FROM 'fillfactor=([0-9]*)') AS fillfactor,
35+
substring(pg_catalog.array_to_string(c.reloptions, ',')
36+
FROM 'toast_tuple_target=([0-9]*)') AS toast_tuple_target,
3537
(substring(pg_catalog.array_to_string(c.reloptions, ',') FROM 'autovacuum_enabled=([a-z|0-9]*)'))::BOOL AS autovacuum_enabled,
3638
substring(pg_catalog.array_to_string(c.reloptions, ',')
3739
FROM 'autovacuum_vacuum_threshold=([0-9]*)') AS autovacuum_vacuum_threshold,

0 commit comments

Comments
 (0)