Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4oAs-002ZsQ-1q for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 22:55:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4oAq-002vFm-2r for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Mar 2026 22:55:05 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4oAq-002vFe-1X for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 22:55:05 +0000 Received: from mail-ot1-x32e.google.com ([2607:f8b0:4864:20::32e]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4oAp-00000000hFB-0EFU for pgsql-hackers@lists.postgresql.org; Mon, 23 Mar 2026 22:55:04 +0000 Received: by mail-ot1-x32e.google.com with SMTP id 46e09a7af769-7d750eeaec3so1398583a34.0 for ; Mon, 23 Mar 2026 15:55:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774306502; cv=none; d=google.com; s=arc-20240605; b=ParQ+epgBSULllFQ5OHh6ZDcJzCgcUltyx0QiJiaJmR76p4w1eYVPJ2V8ru9ENjvvg 9wBDPhCBA/88v0FQ1XNSg5+ysdG9m/4bdFl9XXKMN6hpyroX1qEQz7k6na4qS02B3/b1 c/NgWxagGHpdJVsM3hdLOgb4c7FTGJnm1Fr705+s/rDfW0KsSdSX5gtFz6hY17x3Tz9k Fm7BeHSBmjoeb5rqy7WhdK0oNNLHxkk74CCGaaor0piSWk/mZf+EdiwWDUVV7s96facR 3ZC4zi9IYx5lsyMXOMFI9GM4VFc6usoRJQpUZCz9NLXExiM0q7puXifHYH2M3uicFtri Gj0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=mVeV2V5fDGsZpJZu/oTjiNyYd4qf0IZVv2tL9jLUFKY=; fh=YhG+GobOUISdtTekbfUmKWi6sBsybzPprN3kaqKSALU=; b=IXDukppFD0J7TL/w+uc+ChxvJvFwz53kt3QyAXW758GBfW+HnIPlArcVUaJA1DumFQ 5g60TQUc5yNjNpwQ5WHQykXogu0bqxp5tyC7rEYK5TFbDaLsSgNUBwEBUpIuDTA6dH+N f8jNGRfLpIWRw5JsgpTuIRvFTZVhQwAUbhDFy+W8hAi74KCL0BH7VTZ4VbBLGIPwhq1P EIFzfyNpoU2Zg0dACatQ6wBRTa+9QuKros2dpv6W6nPzqrfsPSTXPGzQhsVu897gErGM MtwE1ycz9+oo9O1d4SHeaXCteQUulUphwmkHY0LdCG3hNOLJ8N2msLvbvx0F/0BGZ7jE LpJA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774306502; x=1774911302; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=mVeV2V5fDGsZpJZu/oTjiNyYd4qf0IZVv2tL9jLUFKY=; b=fTAjHZYTQ6PZ8wszkt8QDKTDNlW9a8dS1NC7W0e0ijGHvdvVI4MtsPY5FH3UrkgGYN GYwPrzZq56ilZNaN8wDaY8yTiIk/ZI6tH+k6WECnJpIjFiboBxPVZhilPO5LkS6jzw08 8XbY0ajdmHKI1zhRww6km7I0AHgg4HMOu0FoQH51UG6/c2jcXlS6mCA9YMixqrbWBVr9 PCtOPKJT4O4qRQ4eTz3nnAuwE4yrnj2QVscqSJwxrG6CSGYGO2uXHqQra1Pc7fdcctwK +kydTHWc5ZO66A6Q3BHoiYs385BXTqlHQdjHxR1am/DRc5k+8eXbFpFAq/3nj747+dEk u2Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774306502; x=1774911302; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=mVeV2V5fDGsZpJZu/oTjiNyYd4qf0IZVv2tL9jLUFKY=; b=svE+9UjrKIL/LwESoh3kuuVMaXNBZ5Rqk3ppk/FfPzeelliPPyh9L6zB6nTe4+9IFf IatONangD828RmiuGhU/1fxJci/MNBvPSthpYm1Q8JT4bm2W6L7WVHLhgRZdTfb6C+yy VwhDxy3tkboq/2gWvHP/92biC2Yn2fjuPg8OVsj/xvOksthXJnnI7BPtyg/gA1Fsu2ED Dbchi8OLcqEuX22wcGO4KMHCp8FMhFDTwX93lcIesQDkmOcMOs4tb+OZychxzmA2xX6H OeU8TQk2JNR81gfXPGb84ALa3wL6VzNJXyUXrnWKfBYmlXzFnJVXrsF8TPwvBr+FPwHS SEOA== X-Gm-Message-State: AOJu0Yym8V5+hvpLIB1h9Gg52Mjl+xror/U+IvN+Ilm5bkukIKIaVibF gpeRFvpDEymEPI07Tg1uYdLxW01a9RCRY3mssrujJH7JXGLBOWVR7H8/7CirqVe7gyyog3qRvSb 39TuAxzlHs4chGmzWrRrx44OROsOKYpE= X-Gm-Gg: ATEYQzyhP/gPrQJHvkhbg2PIcJ4dysdgI1hqKivqt6esLMy6ZF3k7hhGTcY5e4KdkkG 9v8BmsTsYiLO912zMn5vbqzEXFxTGCYoLeq92WqvUbre3c6R9TsfBVXemCH1zzOK29TVimUu4oK 1MoOJuA0G0MmuhC+JdeIdob038Db8eBu1MEx+P9DWSn2HWO7t9LbUKbTmQYU0VXDmyVonVcxjFv I8AbsNruunxGTXgbw/fraBK8ESRGemOZliA/+nkI9G4CZ7qjo1mQ0tKQy/aNwA/SGn7Uh/L1cwl 3VxWK//m4WZUi/kOMYVAkdBbRzs/VA4zrJ3sgrJgEQ== X-Received: by 2002:a05:6820:229c:b0:67d:e140:343e with SMTP id 006d021491bc7-67de14036f0mr7157327eaf.13.1774306502439; Mon, 23 Mar 2026 15:55:02 -0700 (PDT) MIME-Version: 1.0 References: <4042a046-3dc9-4fc6-bfc6-62beb8492f27@eisentraut.org> <2228785.1769016115@sss.pgh.pa.us> In-Reply-To: From: Greg Sabino Mullane Date: Mon, 23 Mar 2026 18:54:28 -0400 X-Gm-Features: AQROBzAZ_7oKxY4_XiKyS3Fr89iFZGkbt9qA52f2679RLT57Zbn8bj7RsKevQJQ Message-ID: Subject: Re: [PATCH] Provide support for trailing commas To: Peter Eisentraut Cc: "pgsql-hackers@lists.postgresql.org" , Tom Lane Content-Type: multipart/alternative; boundary="000000000000ccf8a1064db8ec05" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ccf8a1064db8ec05 Content-Type: text/plain; charset="UTF-8" Alright, I walked through the entire list of every place the original patch added a comma, and ruthlessly trimmed out the ones that were not really needed, likely to cause issues, and/or frankly applied on too trivial a piece of SQL to worry about. Here's my list that people can poke at. Once we settle on which ones survive, I can make a new patch. The focus is mostly on the largest potential uses: lists of select items / column names. Items to keep (i.e. add trailing comma support): utility_option_list TableElementList opt_column_list optional_period_name index_params, index_including_params table_func_column_list insert_column_list opt_search_clause (also has some minor refactoring and adds depth_or_breadth) sortby_list group_by_list vacuum_relation_list from_list xmltable_column_list xml_namespace_list array_expr_list target_list qualified_name_list Items I am not sure about: TriggerFuncArgs (seems sensible, low impact) enum_val_list (since it is kind of a column list) any_name_list / role_list (weak +1) type_name_list (trivial but rarely used) set_clause_list (weak +1) relation_expr_list (mostly for LOCK) rowsfrom_list (trivial) json_table_column_definition_list (another sort column list thing) expr_list (this is the controversial ROW() one) Items I can Relucatantly Skip: alter_table_cmds reloption_list hash_partbound alter_type_cmds copy_generic_opt_arg_list opt_without_overlaps ExclusionConstraintList part_params stats_param generic_option_list alter_generic_option_list event_trigger_value_list def_list opclass_item_list opclass_drop_list privilege_list parameter_name_list grant_tole_opt_list aggr_args_list aggregate_with_argtypes_list transform_type_list operator_with_argtypes_list operator_def_list pub_obj_list pub_all_obj_type_list transaction_mode_list drop_option_list (only one option now anyway!) set_target_list TableFuncElementList bxml_attribute_list (code has changed anyway!) window_definition_list func_arg_list type_list name_list (mostly for permissions) Cheers, Greg --000000000000ccf8a1064db8ec05 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Alright, I walked through the entire list of every place t= he original patch added a comma, and ruthlessly trimmed out the ones that w= ere not really needed, likely to cause issues, and/or frankly applied on to= o trivial a piece of SQL to worry about. Here's my list that people can= poke at. Once we settle on which ones survive, I can make a new patch. The= focus is mostly on the largest potential uses: lists of select items / col= umn names.

Items to keep (i.e. add trailing comma support):

u= tility_option_list
TableElementList
opt_column_list
optional_perio= d_name
index_params, index_including_params
table_func_column_listinsert_column_list
opt_search_clause (also has some minor refactoring a= nd adds depth_or_breadth)
sortby_list
group_by_list
vacuum_relatio= n_list
from_list
xmltable_column_list
xml_namespace_list
array_= expr_list
target_list
qualified_name_list


Items I am not s= ure about:

TriggerFuncArgs (seems sensible, low impact)
enum_val_= list (since it is kind of a column list)
any_name_list / role_list (weak= +1)
type_name_list (trivial but rarely used)
set_clause_list (weak += 1)
relation_expr_list (mostly for LOCK)
rowsfrom_list (trivial)
js= on_table_column_definition_list (another sort column list thing)
expr_li= st (this is the controversial ROW() one)

Items I can Relucatantly Sk= ip:

alter_table_cmds
reloption_list
hash_partbound
alter_ty= pe_cmds
copy_generic_opt_arg_list
opt_without_overlaps
ExclusionCo= nstraintList
part_params
stats_param
generic_option_list
alter_= generic_option_list
event_trigger_value_list
def_list
opclass_item= _list
opclass_drop_list
privilege_list
parameter_name_list
gran= t_tole_opt_list
aggr_args_list
aggregate_with_argtypes_list
transf= orm_type_list
operator_with_argtypes_list
operator_def_list
pub_ob= j_list
pub_all_obj_type_list
transaction_mode_list
drop_option_lis= t (only one option now anyway!)
set_target_list
TableFuncElementList<= br>bxml_attribute_list (code has changed anyway!)
window_definition_list=
func_arg_list
type_list
name_list (mostly for permissions)
Cheers,
Greg

--000000000000ccf8a1064db8ec05--