sipd-transaksi-belanja/migrations/000008_create_all_schema.up.sql
2025-09-16 08:37:42 +07:00

40 lines
1.5 KiB
PL/PgSQL

DROP SCHEMA IF EXISTS rancangan_murni CASCADE;
DROP SCHEMA IF EXISTS penetapan_murni CASCADE;
DROP SCHEMA IF EXISTS rancangan_pergeseran CASCADE;
DROP SCHEMA IF EXISTS penetapan_pergeseran CASCADE;
DROP SCHEMA IF EXISTS rancangan_perubahan CASCADE;
DROP SCHEMA IF EXISTS penetapan_perubahan CASCADE;
DROP SCHEMA IF EXISTS rancangan_pergeseran_perubahan CASCADE;
DROP SCHEMA IF EXISTS penetapan_pergeseran_perubahan CASCADE;
CREATE SCHEMA IF NOT EXISTS rancangan_murni;
CREATE SCHEMA IF NOT EXISTS penetapan_murni;
CREATE SCHEMA IF NOT EXISTS rancangan_pergeseran;
CREATE SCHEMA IF NOT EXISTS penetapan_pergeseran;
CREATE SCHEMA IF NOT EXISTS rancangan_perubahan;
CREATE SCHEMA IF NOT EXISTS penetapan_perubahan;
CREATE SCHEMA IF NOT EXISTS rancangan_pergeseran_perubahan;
CREATE SCHEMA IF NOT EXISTS penetapan_pergeseran_perubahan;
CREATE EXTENSION IF NOT EXISTS "pgcrypto";
DROP FUNCTION IF EXISTS public.uuid_generate_v7() CASCADE;
CREATE FUNCTION public.uuid_generate_v7() RETURNS uuid
LANGUAGE plpgsql
AS $$
declare
unix_ts_ms bytea;
uuid_bytes bytea;
begin
unix_ts_ms = substring(int8send((extract(epoch from clock_timestamp()) * 1000)::bigint) from 3);
-- use random v4 uuid as starting point (which has the same variant we need)
uuid_bytes = uuid_send(gen_random_uuid());
-- overlay timestamp
uuid_bytes = overlay(uuid_bytes placing unix_ts_ms from 1 for 6);
-- set version 7 by flipping the 2 and 1 bit in the version 4 string
uuid_bytes = set_bit(set_bit(uuid_bytes, 53, 1), 52, 1);
return encode(uuid_bytes, 'hex')::uuid;
end
$$;