[PATCH] services: postgresql: Add more role fields.

  • Open
  • quality assurance status badge
Details
2 participants
  • Ludovic Courtès
  • Miguel Ángel Moreno
Owner
unassigned
Submitted by
Miguel Ángel Moreno
Severity
normal
M
M
Miguel Ángel Moreno wrote on 6 Jun 2023 11:28
(address . guix-patches@gnu.org)(address . me@mianmoreno.com)
86legxos70.fsf@mianmoreno.com
* gnu/services/databases.scm (postgresql-role): Add more role fields.
(postgresql-create-roles): Honor it.
* doc/guix.texi (Database Services): Document it.
---
doc/guix.texi | 16 +++++++++++++++-
gnu/services/databases.scm | 19 ++++++++++++++++---
2 files changed, 31 insertions(+), 4 deletions(-)

Toggle diff (77 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 60972f408d..e384a3a13d 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -24784,7 +24784,21 @@ Database Services
@code{superuser}.
@item @code{create-database?} (default: @code{#f})
-Whether to create a database with the same name as the role.
+whether to create a database with the same name as the role.
+
+@item @code{encoding} (default: @code{"UTF8"})
+The character set to use for storing text in the database.
+
+@item @code{collation} (default: @code{"en_US.utf8"})
+The string sort order locale setting.
+
+@item @code{ctype} (default: @code{"en_US.utf8"})
+The character classification locale setting.
+
+@item @code{template} (default: @code{"template1"})
+The default template to copy the new database from when creating it.
+Use @code{"template0"} for a pristine database with no system-local
+modifications.
@end table
@end deftp
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index e8e42d3b7b..7148971c1d 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -363,7 +363,15 @@ (define-record-type* <postgresql-role>
(permissions postgresql-role-permissions
(default '(createdb login))) ;list
(create-database? postgresql-role-create-database? ;boolean
- (default #f)))
+ (default #f))
+ (encoding postgresql-role-encoding ;string
+ (default "UTF8"))
+ (collation postgresql-role-collation ;string
+ (default "en_US.utf8"))
+ (ctype postgresql-role-ctype ;string
+ (default "en_US.utf8"))
+ (template postgresql-role-template ;string
+ (default "template1")))
(define-record-type* <postgresql-role-configuration>
postgresql-role-configuration make-postgresql-role-configuration
@@ -392,7 +400,8 @@ (define (postgresql-create-roles config)
(append-map
(lambda (role)
(match-record role <postgresql-role>
- (name permissions create-database?)
+ (name permissions create-database? encoding collation ctype
+ template)
`("SELECT NOT(EXISTS(SELECT 1 FROM pg_catalog.pg_roles WHERE \
rolname = '" ,name "')) as not_exists;\n"
"\\gset\n"
@@ -402,7 +411,11 @@ (define (postgresql-create-roles config)
";\n"
,@(if create-database?
`("CREATE DATABASE \"" ,name "\""
- " OWNER \"" ,name "\";\n")
+ " OWNER \"" ,name "\"\n"
+ " ENCODING '" ,encoding "'\n"
+ " LC_COLLATE '" ,collation "'\n"
+ " LC_CTYPE '" ,ctype "'\n"
+ " TEMPLATE " ,template ";")
'())
"\\endif\n")))
roles)))
--
2.40.1

--
Best regards,
Miguel Ángel Moreno
L
L
Ludovic Courtès wrote on 14 Jun 2023 12:38
(name . Miguel Ángel Moreno)(address . me@mianmoreno.com)
87v8fqs503.fsf@gnu.org
Hi,

(Cc: Christopher Baines who knows pgsql better than I do.)

Miguel Ángel Moreno <me@mianmoreno.com> skribis:

Toggle quote (4 lines)
> * gnu/services/databases.scm (postgresql-role): Add more role fields.
> (postgresql-create-roles): Honor it.
> * doc/guix.texi (Database Services): Document it.

That looks like an improvement! Some comments:

Toggle quote (4 lines)
> @item @code{create-database?} (default: @code{#f})
> -Whether to create a database with the same name as the role.
> +whether to create a database with the same name as the role.

This change is unnecessary (leftover?).

Toggle quote (3 lines)
> +@item @code{encoding} (default: @code{"UTF8"})
> +The character set to use for storing text in the database.

Or "UTF-8"? It might be worth mentioning the naming convention for
encodings, especially if it differs from

Toggle quote (11 lines)
> +@item @code{collation} (default: @code{"en_US.utf8"})
> +The string sort order locale setting.
> +
> +@item @code{ctype} (default: @code{"en_US.utf8"})
> +The character classification locale setting.
> +
> +@item @code{template} (default: @code{"template1"})
> +The default template to copy the new database from when creating it.
> +Use @code{"template0"} for a pristine database with no system-local
> +modifications.

Are these defaults equivalent to those that were previously in effect?
If would be ideal.

Thanks, and apologies for the delay!

Ludo’.
L
L
Ludovic Courtès wrote on 8 Oct 2023 23:31
control message for bug #63926
(address . control@debbugs.gnu.org)
871qe4yf5q.fsf@gnu.org
tags 63926 + moreinfo
quit
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 63926@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 63926
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch