Re: pg_get__*_ddl consolidation
Euler Taveira <euler@eulerto.com>
From: "Euler Taveira" <euler@eulerto.com>
To: "Jelte Fennema" <postgres@jeltef.nl>,
"Andrew Dunstan" <andrew@dunslane.net>
Cc: "David G. Johnston" <david.g.johnston@gmail.com>, japin <japinli@hotmail.com>, "Zsolt Parragi" <zsolt.parragi@percona.com>, Álvaro Herrera <alvherre@kurilemu.de>, "PostgreSQL Hackers" <pgsql-hackers@lists.postgresql.org>
Date: 2026-04-06T17:09:55Z
Lists: pgsql-hackers
On Mon, Apr 6, 2026, at 12:24 PM, Jelte Fennema-Nio wrote: > The thing I'm questioning is whether we need a new way of providing > key+value pairs as optional arguments to functions. IMO we already had a > perfectly fine one. Introducing another adds complexity (both to the > code and to the user) and I don't see any compelling reason to do so. > I did the same question when reviewing one of these patches. My first reaction was if we want flexibility to cover various use cases and maintainability to add/deprecate new options, we need a mechanism to avoid breaking compatibility or even overloading the function (complexity). My natural choice was key-value pair arguments. It needs new support code (although we already use this style in some of the backend functions -- e.g. pg_logical_slot_*_changes()). > Attached is a patch with roughly what I have in mind instead. By doing > this we can also make the functinos STRICT, so that we don't have to > worry about handling NULL values for the first argument. > That's a good point. > Afaict this named parameter approach only has benefits over the VARIADIC > argument one. But if I'm wrong about that, please let me know. > I also consider your approach but decided not to use it. The argument against named arguments is that you cannot add new argument *without* a DEFAULT value; if you do, all existing functions will fail. You also need to create another function with a different list of arguments to support a new option. If we are fine with this restriction, your proposal seems ok to me. One point in favor of your proposal is that the named arguments seems more intuitive than the key-value pair arguments. The first impression is that interchanging key and value is harder to figure out that the named argument notation. Of course, documentation and some examples can help the user to write these function calls. That's not the first function that uses this key-value argument approach. -- Euler Taveira EDB https://www.enterprisedb.com/
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Use named boolean parameters for pg_get_*_ddl option arguments
- d6ed87d19890 19 (unreleased) landed
-
Convert ddlutils regression tests to TAP tests.
- c529ee38b9eb 19 (unreleased) landed
-
Fix pfree crash in pg_get_role_ddl() and pg_get_database_ddl().
- 1f108fc02ece 19 (unreleased) landed
-
Fixups for a4f774cf1c7
- 6c7bce28c83f 19 (unreleased) landed
-
Add infrastructure for pg_get_*_ddl functions
- 4881981f9202 19 (unreleased) landed
-
Add pg_get_database_ddl() function
- a4f774cf1c7e 19 (unreleased) landed
-
Add pg_get_role_ddl() function
- 76e514ebb4b5 19 (unreleased) landed
-
Add pg_get_tablespace_ddl() function
- b99fd9fd7f36 19 (unreleased) landed