CREATE TABLE IF NOT EXISTS {SCHEMA_NAME}.settings (

name        VARCHAR PRIMARY KEY NOT NULL,
value       VARCHAR

);

DROP FUNCTION IF EXISTS {SCHEMA_NAME}.update_settings(p_name VARCHAR, p_value VARCHAR);

CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.settings_set(p_name VARCHAR, p_value VARCHAR)

RETURNS VOID

AS $$

BEGIN
  IF p_value IS NULL THEN
    DELETE FROM {SCHEMA_NAME}.settings WHERE name = p_name;
  ELSE
    INSERT INTO {SCHEMA_NAME}.settings (name, value) VALUES(p_name, p_value)
      ON CONFLICT(name) DO UPDATE SET value = p_value;
  END IF;
END;

$$ LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION {SCHEMA_NAME}.settings_get(p_name VARCHAR)

RETURNS varchar

AS $$

DECLARE
  p_result varchar;
BEGIN
  SELECT value INTO p_result FROM {SCHEMA_NAME}.settings WHERE name=$1;
  RETURN p_result;
END;

$$ LANGUAGE plpgsql;

– define version settings —————————————————-

SELECT {SCHEMA_NAME}.settings_set('version', NULL); SELECT {SCHEMA_NAME}.settings_set('client_version', NULL); SELECT {SCHEMA_NAME}.settings_set('schema_version', '{CLIENT_VERSION}');