PostgreSQL and Lisp.
You can get the example
Install postmodern
CL-USER> (ql:quickload "postmodern")
To load "postmodern":
  Load 1 ASDF system:
    postmodern
; Loading "postmodern"
("postmodern")
Use the package
CL-USER> (in-package :postmodern)
POMO> 
Define a global variable
POMO> (defparameter *db-parameters* '("db_name" "user_name" "1ultrasecret123" "localhost" :POOLED-P T))
Define a macro in order to connect the postgresql server
POMO> (defmacro with-database (&body query)
  "This macro creates the connection with specified database information in *db-parameter* and execute the query."
  `(postmodern:with-connection *db-parameters* 
  ,@query))
Test connection
POMO> (defun postgresql-test ()
  "Returns a string which is the version of the PostgreSQL"
  (let ((version nil))
    (with-database
      (setf version (query (:select (:version))
               :single)))
    (format t "~a ~%" version)))
POMO> (postgresql-test)
PostgreSQL 11.9 (Debian 11.9-0+deb10u1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit 
NIL
POMO> 
Define a simple table
POMO> (defclass fruits ()
  ((id-fruit :accessor id-fruit :col-type serial :initarg :id-fruit)
   (name :accessor name :col-type string :initarg :name :initform ""))
  (:documentation "Dao class for a fruit record.")
  (:metaclass postmodern:dao-class)
  (:table-name fruits)(:keys id-fruit))
See the SQL query string
POMO> (dao-table-definition 'fruits)
"CREATE TABLE fruits (id_fruit SERIAL NOT NULL, name TEXT NOT NULL, PRIMARY KEY (id_fruit))"
Create the table
POMO> (with-database
  (execute (dao-table-definition 'fruits)))
Or
POMO> (deftable fruits (!dao-def))
POMO> (with-database
  (create-table 'fruits))
Database access objects (CRUD)
 Insert
POMO> (with-database
  (insert-dao (make-instance 'fruits :name "apple"))
  (insert-dao (make-instance 'fruits :name "orange")))
Select
POMO> (with-database
  (get-dao 'fruits 1))
Define a method to display information
POMO> (defparameter *sql-result* nil)
POMO> (defmethod read-information ((obj fruits))
  (format t "id= ~a~%name= ~a~%" (id-fruit obj) (name obj)))
POMO> (setf *sql-result* (with-database
             (get-dao 'fruits 1)))
POMO> (read-information *sql-result*)
id= 1
name= apple
NIL
POMO> 
Update
POMO> (defun update (id new-name)
  (let ((record nil))
    ;; get the record
    (setf record (with-database
           (get-dao 'fruits id)))
    ;; set the new value
    (setf (name record) new-name)
    ;; finally update the record
    (with-database
      (update-dao record))))
POMO> (update 1 "mango")
POMO> (setf *sql-result* (with-database
             (get-dao 'fruits 1)))
POMO> (read-information *sql-result*)
id= 1
name= mango
NIL
POMO> 
Delete
POMO> (with-database
  (delete-dao (make-instance 'fruits :id-fruit 1)))
#posgres #lisp
