github.com/openfga/openfga@v1.5.4-rc1/assets/migrations/postgres/001_initialize_schema.sql (about) 1 -- +goose Up 2 CREATE TABLE tuple ( 3 store TEXT NOT NULL, 4 object_type TEXT NOT NULL, 5 object_id TEXT NOT NULL, 6 relation TEXT NOT NULL, 7 _user TEXT NOT NULL, 8 user_type TEXT NOT NULL, 9 ulid TEXT NOT NULL, 10 inserted_at TIMESTAMPTZ NOT NULL, 11 PRIMARY KEY (store, object_type, object_id, relation, _user) 12 ); 13 14 CREATE INDEX idx_tuple_partial_user ON tuple (store, object_type, object_id, relation, _user) WHERE user_type = 'user'; 15 CREATE INDEX idx_tuple_partial_userset ON tuple (store, object_type, object_id, relation, _user) WHERE user_type = 'userset'; 16 CREATE UNIQUE INDEX idx_tuple_ulid ON tuple (ulid); 17 18 CREATE TABLE authorization_model ( 19 store TEXT NOT NULL, 20 authorization_model_id TEXT NOT NULL, 21 type TEXT NOT NULL, 22 type_definition BYTEA, 23 PRIMARY KEY (store, authorization_model_id, type) 24 ); 25 26 CREATE TABLE store ( 27 id TEXT PRIMARY KEY, 28 name TEXT NOT NULL, 29 created_at TIMESTAMPTZ NOT NULL, 30 updated_at TIMESTAMPTZ, 31 deleted_at TIMESTAMPTZ 32 ); 33 34 CREATE TABLE assertion ( 35 store TEXT NOT NULL, 36 authorization_model_id TEXT NOT NULL, 37 assertions BYTEA, 38 PRIMARY KEY (store, authorization_model_id) 39 ); 40 41 CREATE TABLE changelog ( 42 store TEXT NOT NULL, 43 object_type TEXT NOT NULL, 44 object_id TEXT NOT NULL, 45 relation TEXT NOT NULL, 46 _user TEXT NOT NULL, 47 operation INTEGER NOT NULL, 48 ulid TEXT NOT NULL, 49 inserted_at TIMESTAMPTZ NOT NULL, 50 PRIMARY KEY (store, ulid, object_type) 51 ); 52 53 -- +goose Down 54 DROP TABLE tuple; 55 DROP TABLE authorization_model; 56 DROP TABLE store; 57 DROP TABLE assertion; 58 DROP TABLE changelog;