Set up postgres

This commit is contained in:
2024-11-16 11:37:49 +01:00
parent 5963c7285b
commit 34d1b40138
6 changed files with 124 additions and 1 deletions

View File

@@ -9,7 +9,7 @@ insert_final_newline = true
max_line_length = 120 max_line_length = 120
tab_width = 4 tab_width = 4
[*.{http,json,md,sh,xml,xsd,yaml,yml}] [*.{http,json,md,sh,sql,xml,xsd,yaml,yml}]
max_line_length = 1024 max_line_length = 1024
indent_size = 2 indent_size = 2
tab_width = 2 tab_width = 2

View File

@@ -7,6 +7,9 @@ Classes crafted, identities bestowed, Each device recorded, their functions unfo
| name | required | info | | name | required | info |
|------------------------|----------|-------------------------| |------------------------|----------|-------------------------|
| spring.profiles.active | * | Spring Boot environment | | spring.profiles.active | * | Spring Boot environment |
| spring.r2dbc.url | * | Postgreas host url |
| spring.r2dbc.username | * | Postgreas username |
| spring.r2dbc.password | ** | Postgreas password |
Required: * can be stored as text, and ** need to be stored as secret. Required: * can be stored as text, and ** need to be stored as secret.

View File

@@ -10,8 +10,12 @@ dependencies {
implementation(hlaeja.kotlin.reflect) implementation(hlaeja.kotlin.reflect)
implementation(hlaeja.kotlinx.coroutines) implementation(hlaeja.kotlinx.coroutines)
implementation(hlaeja.org.springframework.springboot.actuator.starter) implementation(hlaeja.org.springframework.springboot.actuator.starter)
implementation(hlaeja.org.springframework.springboot.r2dbc.starter)
implementation(hlaeja.org.springframework.springboot.webflux.starter) implementation(hlaeja.org.springframework.springboot.webflux.starter)
runtimeOnly(hlaeja.org.postgresql)
runtimeOnly(hlaeja.org.postgresql.r2dbc)
testImplementation(hlaeja.io.mockk) testImplementation(hlaeja.io.mockk)
testImplementation(hlaeja.io.projectreactor.reactor.test) testImplementation(hlaeja.io.projectreactor.reactor.test)
testImplementation(hlaeja.kotlin.test.junit5) testImplementation(hlaeja.kotlin.test.junit5)

65
sql/000-initizalise.sql Normal file
View File

@@ -0,0 +1,65 @@
-- Role: role_administrator
-- DROP ROLE IF EXISTS role_administrator;
CREATE ROLE role_administrator;
-- Role: role_service
-- DROP ROLE IF EXISTS role_service;
CREATE ROLE role_service;
-- Role: role_maintainer
-- DROP ROLE IF EXISTS role_maintainer;
CREATE ROLE role_maintainer;
-- Role: support_role
-- DROP ROLE IF EXISTS support_role;
CREATE ROLE role_support;
-- User: services
-- DROP USER IF EXISTS services;
CREATE USER services WITH PASSWORD 'password';
-- Assign role to the user
GRANT role_service TO services;
-- User: user_maintainer
-- DROP USER IF EXISTS user_maintainer;
CREATE USER user_maintainer WITH PASSWORD 'password';
-- Assign role to the user
GRANT role_maintainer TO user_maintainer;
-- User: user_support
-- DROP USER IF EXISTS user_support;
CREATE USER user_support WITH PASSWORD 'password';
-- Assign role to the user
GRANT role_support TO user_support;
-- Database: device_registry
-- DROP DATABASE IF EXISTS device_registry;
CREATE DATABASE device_registry
WITH
OWNER = role_administrator
ENCODING = 'UTF8'
LC_COLLATE = 'en_US.utf8'
LC_CTYPE = 'en_US.utf8'
LOCALE_PROVIDER = 'libc'
TABLESPACE = pg_default
CONNECTION LIMIT = -1
IS_TEMPLATE = False;

43
sql/001-uuid_v7.sql Normal file
View File

@@ -0,0 +1,43 @@
-- FUNCTION: public.gen_uuid_v7(timestamp with time zone)
-- DROP FUNCTION IF EXISTS public.gen_uuid_v7(timestamp with time zone);
CREATE OR REPLACE FUNCTION public.gen_uuid_v7(p_timestamp timestamp with time zone)
RETURNS uuid
LANGUAGE 'sql'
COST 100
VOLATILE PARALLEL UNSAFE
AS
$BODY$
-- Replace the first 48 bits of a uuid v4 with the provided timestamp (in milliseconds) since 1970-01-01 UTC, and set the version to 7
SELECT encode(set_bit(set_bit(overlay(uuid_send(gen_random_uuid()) PLACING substring(int8send((extract(EPOCH FROM p_timestamp) * 1000):: BIGINT) FROM 3) FROM 1 FOR 6), 52, 1), 53, 1), 'hex') ::uuid;
$BODY$;
ALTER FUNCTION public.gen_uuid_v7(timestamp with time zone)
OWNER TO role_administrator;
COMMENT
ON FUNCTION public.gen_uuid_v7(timestamp with time zone)
IS 'Generate a UUIDv7 value using a provided timestamp (in milliseconds since 1970-01-01 UTC) with 74 bits of randomness.';
-- FUNCTION: public.gen_uuid_v7()
-- DROP FUNCTION IF EXISTS public.gen_uuid_v7();
CREATE OR REPLACE FUNCTION public.gen_uuid_v7()
RETURNS uuid
LANGUAGE 'sql'
COST 100
VOLATILE PARALLEL UNSAFE
AS
$BODY$
SELECT gen_uuid_v7(clock_timestamp());
$BODY$;
ALTER FUNCTION public.gen_uuid_v7()
OWNER TO role_administrator;
COMMENT
ON FUNCTION public.gen_uuid_v7()
IS 'Generate a UUIDv7 value with a 48-bit timestamp (millisecond precision) and 74 bits of randomness.';

View File

@@ -18,6 +18,10 @@ spring:
config: config:
activate: activate:
on-profile: development on-profile: development
r2dbc:
url: r2dbc:postgresql://localhost:5432/device_registry
username: services
password: password
--- ---
########################## ##########################
@@ -27,6 +31,10 @@ spring:
config: config:
activate: activate:
on-profile: docker on-profile: docker
r2dbc:
url: r2dbc:postgresql://PostgreSQL:5432/device_registry
username: services
password: password
--- ---
############################## ##############################