mirror of
https://github.com/zitadel/zitadel.git
synced 2025-08-11 19:17:32 +00:00
feat(database): support for postgres (#3998)
* beginning with postgres statements * try pgx * use pgx * database * init works for postgres * arrays working * init for cockroach * init * start tests * tests * TESTS * ch * ch * chore: use go 1.18 * read stmts * fix typo * tests * connection string * add missing error handler * cleanup * start all apis * go mod tidy * old update * switch back to minute * on conflict * replace string slice with `database.StringArray` in db models * fix tests and start * update go version in dockerfile * setup go * clean up * remove notification migration * update * docs: add deploy guide for postgres * fix: revert sonyflake * use `database.StringArray` for daos * use `database.StringArray` every where * new tables * index naming, metadata primary key, project grant role key type * docs(postgres): change to beta * chore: correct compose * fix(defaults): add empty postgres config * refactor: remove unused code * docs: add postgres to self hosted * fix broken link * so? * change title * add mdx to link * fix stmt * update goreleaser in test-code * docs: improve postgres example * update more projections * fix: add beta log for postgres * revert index name change * prerelease * fix: add sequence to v1 "reduce paniced" * log if nil * add logging * fix: log output * fix(import): check if org exists and user * refactor: imports * fix(user): ignore malformed events * refactor: method naming * fix: test * refactor: correct errors.Is call * ci: don't build dev binaries on main * fix(go releaser): update version to 1.11.0 * fix(user): projection should not break * fix(user): handle error properly * docs: correct config example * Update .releaserc.js * Update .releaserc.js Co-authored-by: Livio Amstutz <livio.a@gmail.com> Co-authored-by: Elio Bischof <eliobischof@gmail.com>
This commit is contained in:
@@ -1 +0,0 @@
|
||||
CREATE SCHEMA eventstore
|
@@ -1 +0,0 @@
|
||||
CREATE SCHEMA projections
|
@@ -1 +0,0 @@
|
||||
CREATE SCHEMA system;
|
@@ -1 +0,0 @@
|
||||
SET experimental_enable_hash_sharded_indexes = on
|
@@ -1 +0,0 @@
|
||||
CREATE SEQUENCE eventstore.system_seq
|
@@ -1,2 +1,2 @@
|
||||
-- replace %[1]s with the name of the user
|
||||
CREATE USER %[1]s WITH PASSWORD $1
|
||||
CREATE USER IF NOT EXISTS %[1]s
|
@@ -1,2 +1,2 @@
|
||||
-- replace %[1]s with the name of the database
|
||||
CREATE DATABASE %[1]s
|
||||
CREATE DATABASE IF NOT EXISTS %[1]s
|
3
cmd/initialise/sql/cockroach/04_eventstore.sql
Normal file
3
cmd/initialise/sql/cockroach/04_eventstore.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
CREATE SCHEMA IF NOT EXISTS eventstore;
|
||||
|
||||
GRANT ALL ON ALL TABLES IN SCHEMA eventstore TO %[1]s;
|
3
cmd/initialise/sql/cockroach/05_projections.sql
Normal file
3
cmd/initialise/sql/cockroach/05_projections.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
CREATE SCHEMA IF NOT EXISTS projections;
|
||||
|
||||
GRANT ALL ON ALL TABLES IN SCHEMA projections TO %[1]s;
|
3
cmd/initialise/sql/cockroach/06_system.sql
Normal file
3
cmd/initialise/sql/cockroach/06_system.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
CREATE SCHEMA IF NOT EXISTS system;
|
||||
|
||||
GRANT ALL ON ALL TABLES IN SCHEMA system TO %[1]s;
|
@@ -1,4 +1,4 @@
|
||||
CREATE TABLE system.encryption_keys (
|
||||
CREATE TABLE IF NOT EXISTS system.encryption_keys (
|
||||
id TEXT NOT NULL
|
||||
, key TEXT NOT NULL
|
||||
|
@@ -1,4 +1,6 @@
|
||||
CREATE TABLE eventstore.events (
|
||||
SET experimental_enable_hash_sharded_indexes = on;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS eventstore.events (
|
||||
id UUID DEFAULT gen_random_uuid()
|
||||
, event_type TEXT NOT NULL
|
||||
, aggregate_type TEXT NOT NULL
|
||||
@@ -22,4 +24,4 @@ CREATE TABLE eventstore.events (
|
||||
, INDEX max_sequence (aggregate_type, aggregate_id, event_sequence DESC, instance_id)
|
||||
, CONSTRAINT previous_sequence_unique UNIQUE (previous_aggregate_sequence DESC, instance_id)
|
||||
, CONSTRAINT prev_agg_type_seq_unique UNIQUE(previous_aggregate_type_sequence, instance_id)
|
||||
)
|
||||
);
|
1
cmd/initialise/sql/cockroach/09_system_sequence.sql
Normal file
1
cmd/initialise/sql/cockroach/09_system_sequence.sql
Normal file
@@ -0,0 +1 @@
|
||||
CREATE SEQUENCE IF NOT EXISTS eventstore.system_seq
|
@@ -1,4 +1,4 @@
|
||||
CREATE TABLE eventstore.unique_constraints (
|
||||
CREATE TABLE IF NOT EXISTS eventstore.unique_constraints (
|
||||
instance_id TEXT,
|
||||
unique_type TEXT,
|
||||
unique_field TEXT,
|
1
cmd/initialise/sql/postgres/01_user.sql
Normal file
1
cmd/initialise/sql/postgres/01_user.sql
Normal file
@@ -0,0 +1 @@
|
||||
CREATE USER %[1]s
|
1
cmd/initialise/sql/postgres/02_database.sql
Normal file
1
cmd/initialise/sql/postgres/02_database.sql
Normal file
@@ -0,0 +1 @@
|
||||
CREATE DATABASE %[1]s
|
3
cmd/initialise/sql/postgres/03_grant_user.sql
Normal file
3
cmd/initialise/sql/postgres/03_grant_user.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
-- replace the first %[1]s with the database
|
||||
-- replace the second \%[2]s with the user
|
||||
GRANT ALL ON DATABASE %[1]s TO %[2]s;
|
3
cmd/initialise/sql/postgres/04_eventstore.sql
Normal file
3
cmd/initialise/sql/postgres/04_eventstore.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
CREATE SCHEMA IF NOT EXISTS eventstore;
|
||||
|
||||
GRANT ALL ON ALL TABLES IN SCHEMA eventstore TO %[1]s;
|
3
cmd/initialise/sql/postgres/05_projections.sql
Normal file
3
cmd/initialise/sql/postgres/05_projections.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
CREATE SCHEMA IF NOT EXISTS projections;
|
||||
|
||||
GRANT ALL ON ALL TABLES IN SCHEMA projections TO %[1]s;
|
3
cmd/initialise/sql/postgres/06_system.sql
Normal file
3
cmd/initialise/sql/postgres/06_system.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
CREATE SCHEMA IF NOT EXISTS system;
|
||||
|
||||
GRANT ALL ON ALL TABLES IN SCHEMA system TO %[1]s;
|
6
cmd/initialise/sql/postgres/07_encryption_keys_table.sql
Normal file
6
cmd/initialise/sql/postgres/07_encryption_keys_table.sql
Normal file
@@ -0,0 +1,6 @@
|
||||
CREATE TABLE IF NOT EXISTS system.encryption_keys (
|
||||
id TEXT NOT NULL
|
||||
, key TEXT NOT NULL
|
||||
|
||||
, PRIMARY KEY (id)
|
||||
);
|
25
cmd/initialise/sql/postgres/08_events_table.sql
Normal file
25
cmd/initialise/sql/postgres/08_events_table.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
CREATE TABLE IF NOT EXISTS eventstore.events (
|
||||
id UUID DEFAULT gen_random_uuid()
|
||||
, event_type TEXT NOT NULL
|
||||
, aggregate_type TEXT NOT NULL
|
||||
, aggregate_id TEXT NOT NULL
|
||||
, aggregate_version TEXT NOT NULL
|
||||
, event_sequence BIGINT NOT NULL
|
||||
, previous_aggregate_sequence BIGINT
|
||||
, previous_aggregate_type_sequence INT8
|
||||
, creation_date TIMESTAMPTZ NOT NULL DEFAULT now()
|
||||
, event_data JSONB
|
||||
, editor_user TEXT NOT NULL
|
||||
, editor_service TEXT NOT NULL
|
||||
, resource_owner TEXT NOT NULL
|
||||
, instance_id TEXT NOT NULL
|
||||
|
||||
, PRIMARY KEY (event_sequence, instance_id)
|
||||
, CONSTRAINT previous_sequence_unique UNIQUE(previous_aggregate_sequence, instance_id)
|
||||
, CONSTRAINT prev_agg_type_seq_unique UNIQUE(previous_aggregate_type_sequence, instance_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS agg_type_agg_id ON eventstore.events (aggregate_type, aggregate_id, instance_id);
|
||||
CREATE INDEX IF NOT EXISTS agg_type ON eventstore.events (aggregate_type, instance_id);
|
||||
CREATE INDEX IF NOT EXISTS agg_type_seq ON eventstore.events (aggregate_type, event_sequence DESC, instance_id);
|
||||
CREATE INDEX IF NOT EXISTS max_sequence ON eventstore.events (aggregate_type, aggregate_id, event_sequence DESC, instance_id);
|
1
cmd/initialise/sql/postgres/09_system_sequence.sql
Normal file
1
cmd/initialise/sql/postgres/09_system_sequence.sql
Normal file
@@ -0,0 +1 @@
|
||||
CREATE SEQUENCE IF NOT EXISTS eventstore.system_seq;
|
@@ -0,0 +1,6 @@
|
||||
CREATE TABLE IF NOT EXISTS eventstore.unique_constraints (
|
||||
instance_id TEXT,
|
||||
unique_type TEXT,
|
||||
unique_field TEXT,
|
||||
PRIMARY KEY (instance_id, unique_type, unique_field)
|
||||
);
|
Reference in New Issue
Block a user