in kong/kong/db/strategies/postgres/connector.lua [911:1005]
function _M.new(kong_config)
local config = {
host = kong_config.pg_host,
port = kong_config.pg_port,
timeout = kong_config.pg_timeout,
user = kong_config.pg_user,
password = kong_config.pg_password,
database = kong_config.pg_database,
schema = kong_config.pg_schema or "",
ssl = kong_config.pg_ssl,
ssl_verify = kong_config.pg_ssl_verify,
cafile = kong_config.lua_ssl_trusted_certificate_combined,
sem_max = kong_config.pg_max_concurrent_queries or 0,
sem_timeout = (kong_config.pg_semaphore_timeout or 60000) / 1000,
}
local refs = kong_config["$refs"]
if refs then
local user_ref = refs.pg_user
local password_ref = refs.pg_password
if user_ref or password_ref then
config["$refs"] = {
user = user_ref,
password = password_ref,
}
end
end
local db = pgmoon.new(config)
local sem
if config.sem_max > 0 then
local err
sem, err = semaphore.new(config.sem_max)
if not sem then
ngx.log(ngx.CRIT, "failed creating the PostgreSQL connector semaphore: ",
err)
end
end
local self = {
config = config,
escape_identifier = db.escape_identifier,
escape_literal = db.escape_literal,
sem_write = sem,
}
if not ngx.IS_CLI and kong_config.pg_ro_host then
ngx.log(ngx.DEBUG, "PostgreSQL connector readonly connection enabled")
local ro_override = {
host = kong_config.pg_ro_host,
port = kong_config.pg_ro_port,
timeout = kong_config.pg_ro_timeout,
user = kong_config.pg_ro_user,
password = kong_config.pg_ro_password,
database = kong_config.pg_ro_database,
schema = kong_config.pg_ro_schema,
ssl = kong_config.pg_ro_ssl,
ssl_verify = kong_config.pg_ro_ssl_verify,
cafile = kong_config.lua_ssl_trusted_certificate_combined,
sem_max = kong_config.pg_ro_max_concurrent_queries,
sem_timeout = kong_config.pg_ro_semaphore_timeout and
(kong_config.pg_ro_semaphore_timeout / 1000) or nil,
}
if refs then
local ro_user_ref = refs.pg_ro_user
local ro_password_ref = refs.pg_ro_password
if ro_user_ref or ro_password_ref then
ro_override["$refs"] = {
user = ro_user_ref,
password = ro_password_ref,
}
end
end
local config_ro = utils.table_merge(config, ro_override)
local sem
if config_ro.sem_max > 0 then
local err
sem, err = semaphore.new(config_ro.sem_max)
if not sem then
ngx.log(ngx.CRIT, "failed creating the PostgreSQL connector semaphore: ",
err)
end
end
self.config_ro = config_ro
self.sem_read = sem
end
return setmetatable(self, _mt)
end