{
  "listen_addresses": "*",
  "port": 5432,
  "max_connections": 200,
  "shared_buffers": "4GB",
  "shared_preload_libraries": ["pg_stat_statements", "auto_explain"],
  "pg_stat_statements.max": 10000,
  "ssl": true,
  "ssl_cert_file": "/etc/postgresql/tls/server.crt",
  "ssl_key_file": "/etc/postgresql/tls/server.key",
  "log_connections": "authentication",

  "include": [
    {"file": "conf.d/*.json", "optional": true}
  ],

  "hba": {
    "children": [
      {"import": "/etc/postgresql/legacy/pg_hba.conf", "optional": true},

      {"transport": "local", "users": "postgres", "auth": {"method": "peer"}},
      {"transport": "local", "auth": {"method": "scram-sha-256"}},

      {"ssl": "require",
       "auth": {"method": "ldap", "ldapserver": "ldap.example.com",
                "ldapbasedn": "dc=example,dc=com", "ldaptls": 1},
       "settings": {"statement_timeout": "5min"},
       "children": [
         {"users": "+admins",
          "auth": {"clientcert": "verify-full"},
          "settings": {"statement_timeout": 0}},
         {"users": "jacob", "auth": {"method": "reject"}}
       ]},

      {"ssl": "require", "users": "+acme", "databases": "acme",
       "auth": {"method": "cert", "map": "acme"},
       "settings": {"work_mem": "64MB", "search_path": "acme, public"}},

      {"databases": "replication", "users": "replicator",
       "address": ["10.0.0.0/8", "fd00::/8"],
       "auth": {"method": "scram-sha-256"}}
    ]
  },

  "ident": {
    "maps": {
      "acme": {
        "/^(.+)@acme\\.com$": "\\1",
        "etl-bot@acme.com": ["acme_etl", "acme_reader"]
      }
    }
  },

  "hosts": {
    "defaults": {"ssl_ca_file": "/etc/postgresql/tls/internal-ca.crt"},
    "entries": {
      "acme.db.example.com": {
        "ssl_cert_file": "/etc/postgresql/tls/acme.crt",
        "ssl_key_file": "/etc/postgresql/tls/acme.key",
        "settings": {"log_connections": "all"}
      },
      "*": {
        "ssl_cert_file": "/etc/postgresql/tls/server.crt",
        "ssl_key_file": "/etc/postgresql/tls/server.key"
      }
    }
  }
}
