guix-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01/08: services: postgresql: Use Guile datatypes.


From: guix-commits
Subject: 01/08: services: postgresql: Use Guile datatypes.
Date: Thu, 28 Jan 2021 07:00:03 -0500 (EST)

mothacehe pushed a commit to branch master
in repository guix.

commit a38d0b0137400b4d54bab5181538fd7eeeefa49a
Author: Mathieu Othacehe <othacehe@gnu.org>
AuthorDate: Mon Jan 18 10:25:18 2021 +0100

    services: postgresql: Use Guile datatypes.
    
    * gnu/services/databases.scm (postgresql-config-file-compiler): Support 
Guile
    datatypes in the "extra-config" field.
    * gnu/tests/databases.scm (%postgresql-os): Test it.
    * doc/guix.texi (Database Services): Document it.
---
 doc/guix.texi              | 18 ++++++++++++------
 gnu/services/databases.scm | 38 ++++++++++++++++++++++----------------
 gnu/tests/databases.scm    | 10 +++++++++-
 3 files changed, 43 insertions(+), 23 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 7e7c432..3c607b3 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -19410,12 +19410,12 @@ local all     all                     trust
 host   all     all     127.0.0.1/32    md5
 host   all     all     ::1/128         md5"))
             (extra-config
-             '(("session_preload_libraries"     "'auto_explain'")
-               ("random_page_cost"              "2")
-               ("auto_explain.log_min_duration" "'100ms'")
-               ("work_mem"                      "'500MB'")
-               ("logging_collector"             "on")
-               ("log_directory"                 "'/var/log/postgresql'")))))))
+             '(("session_preload_libraries"     "auto_explain")
+               ("random_page_cost"              2)
+               ("auto_explain.log_min_duration" "100 ms")
+               ("work_mem"                      "500 MB")
+               ("logging_collector"             #t)
+               ("log_directory"                 "/var/log/postgresql")))))))
 @end lisp
 
 @table @asis
@@ -19435,6 +19435,12 @@ List of additional keys and values to include in the 
PostgreSQL config
 file.  Each entry in the list should be a list where the first element
 is the key, and the remaining elements are the values.
 
+The values can be numbers, booleans or strings and will be mapped to
+PostgreSQL parameters types @code{Boolean}, @code{String},
+@code{Numeric}, @code{Numeric with Unit} and @code{Enumerated} described
+@uref{https://www.postgresql.org/docs/current/config-setting.html,
+here}.
+
 @end table
 @end deftp
 
diff --git a/gnu/services/databases.scm b/gnu/services/databases.scm
index d2dc5f0..bb0e406 100644
--- a/gnu/services/databases.scm
+++ b/gnu/services/databases.scm
@@ -115,22 +115,28 @@ host      all     all     ::1/128         md5"))
   (match file
     (($ <postgresql-config-file> log-destination hba-file
                                  ident-file extra-config)
-     (define (single-quote string)
-       (if string
-           (list "'" string "'")
-           '()))
-
-     (define contents
-       (append-map
-        (match-lambda
-          ((key) '())
-          ((key . #f) '())
-          ((key values ...) `(,key " = " ,@values "\n")))
-
-        `(("log_destination" ,@(single-quote log-destination))
-          ("hba_file" ,@(single-quote hba-file))
-          ("ident_file" ,@(single-quote ident-file))
-          ,@extra-config)))
+     ;; See: https://www.postgresql.org/docs/current/config-setting.html.
+    (define (format-value value)
+      (cond
+       ((boolean? value)
+        (list (if value "on" "off")))
+       ((number? value)
+        (list (number->string value)))
+       (else
+        (list "'" value "'"))))
+
+    (define contents
+      (append-map
+       (match-lambda
+         ((key) '())
+         ((key . #f) '())
+         ((key values ...)
+          `(,key " = " ,@(append-map format-value values) "\n")))
+
+       `(("log_destination" ,log-destination)
+         ("hba_file" ,hba-file)
+         ("ident_file" ,ident-file)
+         ,@extra-config)))
 
      (gexp->derivation
       "postgresql.conf"
diff --git a/gnu/tests/databases.scm b/gnu/tests/databases.scm
index 31d5ae4..7338007 100644
--- a/gnu/tests/databases.scm
+++ b/gnu/tests/databases.scm
@@ -218,7 +218,15 @@
   (simple-operating-system
    (service postgresql-service-type
             (postgresql-configuration
-             (postgresql postgresql-10)))))
+             (postgresql postgresql-10)
+             (config-file
+              (postgresql-config-file
+               (extra-config
+                '(("session_preload_libraries" "auto_explain")
+                  ("random_page_cost" 2)
+                  ("auto_explain.log_min_duration" "100 ms")
+                  ("work_mem" "500 MB")
+                  ("debug_print_plan" #t)))))))))
 
 (define (run-postgresql-test)
   "Run tests in %POSTGRESQL-OS."



reply via email to

[Prev in Thread] Current Thread [Next in Thread]