+82
apps/api/drizzle/0000_left_swordsman.sql
+82
apps/api/drizzle/0000_left_swordsman.sql
···
1
+
CREATE SCHEMA xata_private;
2
+
3
+
--
4
+
-- Name: xid; Type: DOMAIN; Schema: xata_private; Owner: -
5
+
--
6
+
7
+
CREATE DOMAIN xata_private.xid AS character(20)
8
+
CONSTRAINT xid_check CHECK ((VALUE ~ '^[a-v0-9]{20}$'::text));
9
+
10
+
CREATE FUNCTION xata_private.xid(_at timestamp with time zone DEFAULT CURRENT_TIMESTAMP) RETURNS xata_private.xid
11
+
LANGUAGE plpgsql SECURITY DEFINER
12
+
AS $$
13
+
DECLARE
14
+
_t INT;
15
+
_m INT;
16
+
_p INT;
17
+
_c INT;
18
+
BEGIN
19
+
_t := floor(EXTRACT(epoch FROM _at));
20
+
_m := xata_private._xid_machine_id();
21
+
_p := pg_backend_pid();
22
+
_c := nextval('xata_private.xid_serial')::INT;
23
+
24
+
return xata_private.xid_encode(ARRAY [
25
+
(_t >> 24) & 255, (_t >> 16) & 255, (_t >> 8) & 255 , _t & 255,
26
+
(_m >> 16) & 255, (_m >> 8) & 255 , _m & 255,
27
+
(_p >> 8) & 255, _p & 255,
28
+
(_c >> 16) & 255, (_c >> 8) & 255 , _c & 255
29
+
]);
30
+
END;
31
+
$$;
32
+
33
+
CREATE FUNCTION xata_private._xid_machine_id() RETURNS integer
34
+
LANGUAGE plpgsql IMMUTABLE
35
+
AS $$
36
+
BEGIN
37
+
RETURN (SELECT system_identifier & 16777215 FROM pg_control_system());
38
+
END;
39
+
$$;
40
+
41
+
CREATE FUNCTION xata_private.xid_encode(_id integer[]) RETURNS xata_private.xid
42
+
LANGUAGE plpgsql
43
+
AS $$
44
+
DECLARE
45
+
_encoding CHAR(1)[] = '{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v}';
46
+
BEGIN
47
+
RETURN _encoding[1 + (_id[1] >> 3)]
48
+
|| _encoding[1 + ((_id[2] >> 6) & 31 | (_id[1] << 2) & 31)]
49
+
|| _encoding[1 + ((_id[2] >> 1) & 31)]
50
+
|| _encoding[1 + ((_id[3] >> 4) & 31 | (_id[2] << 4) & 31)]
51
+
|| _encoding[1 + (_id[4] >> 7 | (_id[3] << 1) & 31)]
52
+
|| _encoding[1 + ((_id[4] >> 2) & 31)]
53
+
|| _encoding[1 + (_id[5] >> 5 | (_id[4] << 3) & 31)]
54
+
|| _encoding[1 + (_id[5] & 31)]
55
+
|| _encoding[1 + (_id[6] >> 3)]
56
+
|| _encoding[1 + ((_id[7] >> 6) & 31 | (_id[6] << 2) & 31)]
57
+
|| _encoding[1 + ((_id[7] >> 1) & 31)]
58
+
|| _encoding[1 + ((_id[8] >> 4) & 31 | (_id[7] << 4) & 31)]
59
+
|| _encoding[1 + (_id[9] >> 7 | (_id[8] << 1) & 31)]
60
+
|| _encoding[1 + ((_id[9] >> 2) & 31)]
61
+
|| _encoding[1 + ((_id[10] >> 5) | (_id[9] << 3) & 31)]
62
+
|| _encoding[1 + (_id[10] & 31)]
63
+
|| _encoding[1 + (_id[11] >> 3)]
64
+
|| _encoding[1 + ((_id[12] >> 6) & 31 | (_id[11] << 2) & 31)]
65
+
|| _encoding[1 + ((_id[12] >> 1) & 31)]
66
+
|| _encoding[1 + ((_id[12] << 4) & 31)];
67
+
END;
68
+
$$;
69
+
70
+
CREATE SEQUENCE xata_private.xid_serial
71
+
START WITH 0
72
+
INCREMENT BY 1
73
+
MINVALUE 0
74
+
MAXVALUE 16777215
75
+
CACHE 1
76
+
CYCLE;
77
+
78
+
CREATE OR REPLACE FUNCTION xata_id()
79
+
RETURNS text AS $$
80
+
SELECT 'rec_' || xata_private.xid();
81
+
$$ LANGUAGE sql IMMUTABLE;
82
+
1
83
CREATE TABLE "album_tracks" (
2
84
"xata_id" text PRIMARY KEY DEFAULT xata_id(),
3
85
"album_id" text NOT NULL,
+2
-2
compose.yaml
+2
-2
compose.yaml
···
26
26
- meilisearch_data:/data.ms
27
27
28
28
db:
29
-
image: tsiry/postgres-xataid:latest
29
+
image: postgres:18
30
30
ports:
31
31
- '5433:5432'
32
32
environment:
···
34
34
POSTGRES_PASSWORD: mysecretpassword
35
35
POSTGRES_DB: rocksky
36
36
volumes:
37
-
- pgdata:/var/lib/postgresql/data
37
+
- pgdata:/var/lib/postgresql/18/docke
38
38
healthcheck:
39
39
test: ['CMD', 'pg_isready']
40
40
interval: 10s