gimmich

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit 0c8bf3282d296a2e73d393cebeac780e07e40526
parent 1cc5be0fcf43873a6f64deacfad4e7ebfed280f7
Author: Martin Ashby <martin@ashbysoft.com>
Date:   Sun,  4 Oct 2026 07:54:38 +0100

WIP extract the original database schema from immich

Start adapting it for sqlite

Diffstat:
M.gitignore | 2++
MNOTES | 13+++++++++++--
Adb.go | 109+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adocker-compose.yml | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Mgo.mod | 2+-
Mmain.go | 9+++++++--
Aschema.sql | 4608+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 4791 insertions(+), 5 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -2,3 +2,5 @@ gen.go immich-openapi-specs.jsongimmich immich-openapi-specs.json gimmich +gimmich.db +data/ diff --git a/NOTES b/NOTES @@ -4,4 +4,13 @@ The thing is an API server with an OpenAPI spec! So use a generator to handle al https://github.com/oapi-codegen/oapi-codegen -OK cool one server interface implemented :) -\ No newline at end of file +OK cool one server interface implemented :) + + +Decision: +- use sqlite and your own db schema, 'inspired' by the original or +- use postgres and use the _exact_ same schema as immich; aim for backwards compatibility + +The latter would allow things like partial migration. But it would also require postgres; wheras having a sqlite db (since this is effectively single-user software) is pretty desirable. + +I'll go with 'inspired by' although I'll start with a mechanical translation. +\ No newline at end of file diff --git a/db.go b/db.go @@ -0,0 +1,108 @@ +package main + +import ( + "database/sql" + "log/slog" + "strings" + "uuid" + + "github.com/mattn/go-sqlite3" +) + +// enums for various tables + +type AlbumUserRoleEnum string +const ( + AlbumUserRoleEnumOwner AlbumUserRoleEnum = "owner" + AlbumUserRoleEnumEditor AlbumUserRoleEnum = "editor" + AlbumUserRoleEnumViewer AlbumUserRoleEnum = "viewer" +) + +type AssetChecksumAlgorithmEnum string +const ( + AssetChecksumAlgorithmEnumSha1 AssetChecksumAlgorithmEnum = "sha1" + AssetChecksumAlgorithmEnumSha1Path AssetChecksumAlgorithmEnum = "sha1-path" +) + + +type AssetVisibilityEnum string +const ( + AssetVisibilityEnumArchive AssetVisibilityEnum = "archive" + AssetVisibilityEnumTimeline AssetVisibilityEnum = "timeline" + AssetVisibilityEnumHidden AssetVisibilityEnum = "hidden" + AssetVisibilityEnumLocked AssetVisibilityEnum = "locked" +) + +type AssetsStatusEnum string +const ( + AssetsStatusEnumActive AssetsStatusEnum = "active" + AssetsStatusEnumTrashed AssetsStatusEnum = "trashed" + AssetsStatusEnumDeleted AssetsStatusEnum = "deleted" +) + + +type SourceTypeEnum string +const ( + SourceTypeEnumMachineLearning SourceTypeEnum = "machine-learning" + SourceTypeEnumExif SourceTypeEnum = "exif" + SourceTypeEnumManual SourceTypeEnum = "manual" +) + +type VideoStreamVariantCodecEnum string +const ( + VideoStreamVariantCodecEnumAv1 VideoStreamVariantCodecEnum = "av1" + VideoStreamVariantCodecEnumHevc VideoStreamVariantCodecEnum = "hevc" + VideoStreamVariantCodecEnumH264 VideoStreamVariantCodecEnum = "h264" +) + + +// custom functions we need to implement +func RegisterCustomFunctions() { + sql.Register("sqlite3_custom", &sqlite3.SQLiteDriver{ + ConnectHook: func(sc *sqlite3.SQLiteConn) error { + err := sc.RegisterFunc("f_concat_ws", fConcatWs, true) + if err != nil { + return err + } + err = sc.RegisterFunc("f_unaccent", fUnaccent, true) + if err != nil { + return err + } + err = sc.RegisterFunc("immich_uuid_v7", immichUuidV7, true) + if err != nil { + return err + } + err = sc.RegisterFunc("uuid_generate_v4", uuidGenerateV4, true) + if err != nil { + return err + } + slog.Info("custom functions registered") + + return nil + }, + }) +} + +func fConcatWs(a string, b any) string { + // CREATE FUNCTION public.f_concat_ws(text, text[]) RETURNS text + // LANGUAGE sql IMMUTABLE PARALLEL SAFE + // AS $_$SELECT array_to_string($2, $1)$_$; + return strings.Join(b.([]string), a) +} + +func fUnaccent(a string) string { + // CREATE FUNCTION public.f_unaccent(text) RETURNS text + // LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE + // RETURN public.unaccent('public.unaccent'::regdictionary, $1); + panic("unimplemented") +} + +func immichUuidV7() string { + u := uuid.NewV7() + return u.String() +} + +func uuidGenerateV4() string { + u := uuid.NewV4() + return u.String() +} +\ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml @@ -0,0 +1,52 @@ +# Docker-compose file for immich all-in-one docker image. +# Used this to start up immich, then run pg_dump to extract the database schema. +--- +services: + immich: + image: ghcr.io/imagegenius/immich:latest + container_name: immich + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + - DB_HOSTNAME=postgres14 + - DB_USERNAME=postgres + - DB_PASSWORD=postgres + - DB_DATABASE_NAME=immich + - REDIS_HOSTNAME=valkey + - DB_PORT=5432 #optional + - REDIS_PORT=6379 #optional + - REDIS_PASSWORD= #optional + - SERVER_HOST=0.0.0.0 #optional + - SERVER_PORT=8080 #optional + - MACHINE_LEARNING_HOST=0.0.0.0 #optional + - MACHINE_LEARNING_PORT=3003 #optional + - MACHINE_LEARNING_WORKERS=1 #optional + - MACHINE_LEARNING_WORKER_TIMEOUT=120 #optional + volumes: + - ./data/config:/config + - ./data/photos:/photos + - ./data/libraries:/libraries #optional + ports: + - 8080:8080 + restart: unless-stopped + + valkey: + image: valkey/valkey:8-bookworm + container_name: valkey + ports: + - 6379:6379 + + postgres14: + image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0 + container_name: postgres14 + environment: + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + POSTGRES_DB: immich + # Uncomment if not on SSDs: + # DB_STORAGE_TYPE: 'HDD' + volumes: + - ./data/postgres:/var/lib/postgresql/data + ports: + - 5432:5432 +\ No newline at end of file diff --git a/go.mod b/go.mod @@ -1,6 +1,6 @@ module mfashby.net/gimmich/v2 -go 1.25.0 +go 1.27.0 tool github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen diff --git a/main.go b/main.go @@ -31,8 +31,8 @@ var ( ) func main() { - _ = must(func() (time.Time, error) { return time.Parse(time.RFC3339, "2026-09-28T12:00:00Z")} ) - db, err := sql.Open("sqlite3", "gimmich.db") + RegisterCustomFunctions() + db, err := sql.Open("sqlite3_custom", "gimmich.db") if err != nil { slog.Error("error opening database", "err", err.Error()) os.Exit(1) @@ -40,6 +40,11 @@ func main() { defer func() { _ = db.Close() }() + _, err = db.Exec("create table if not exists foo(col1 int)") + if err != nil { + slog.Error("error opening db", slog.Any("err", err)) + os.Exit(1) + } m := http.NewServeMux() m.HandleFunc("/.well-known/immich", func(w http.ResponseWriter, r *http.Request) { type Api struct { diff --git a/schema.sql b/schema.sql @@ -0,0 +1,4608 @@ +-- +-- PostgreSQL database dump +-- + +-- \restrict mjMyY2YEVBfWGabnjdRqEcQmimigWbvovifIDg4VxfkA30tCaxYDjnokejkP5XZ + +-- Dumped from database version 14.19 (Debian 14.19-1.pgdg12+1) +-- Dumped by pg_dump version 14.19 (Debian 14.19-1.pgdg12+1) + +-- SET statement_timeout = 0; +-- SET lock_timeout = 0; +-- SET idle_in_transaction_session_timeout = 0; +-- SET client_encoding = 'UTF8'; +-- SET standard_conforming_strings = on; +-- SELECT pg_catalog.set_config('search_path', '', false); +-- SET check_function_bodies = false; +-- SET xmloption = content; +-- SET client_min_messages = warning; +-- SET row_security = off; + +-- +-- Name: cube; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS cube WITH SCHEMA public; + + +-- +-- Name: EXTENSION cube; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION cube IS 'data type for multidimensional cubes'; + + +-- +-- Name: earthdistance; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS earthdistance WITH SCHEMA public; + + +-- +-- Name: EXTENSION earthdistance; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION earthdistance IS 'calculate great-circle distances on the surface of the Earth'; + + +-- +-- Name: pg_trgm; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public; + + +-- +-- Name: EXTENSION pg_trgm; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION pg_trgm IS 'text similarity measurement and index searching based on trigrams'; + + +-- +-- Name: unaccent; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS unaccent WITH SCHEMA public; + + +-- +-- Name: EXTENSION unaccent; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION unaccent IS 'text search dictionary that removes accents'; + + +-- +-- Name: uuid-ossp; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA public; + + +-- +-- Name: EXTENSION "uuid-ossp"; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION "uuid-ossp" IS 'generate universally unique identifiers (UUIDs)'; + + +-- +-- Name: vector; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS vector WITH SCHEMA public; + + +-- +-- Name: EXTENSION vector; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION vector IS 'vector data type and ivfflat and hnsw access methods'; + + +-- +-- Name: vchord; Type: EXTENSION; Schema: -; Owner: - +-- + +-- CREATE EXTENSION IF NOT EXISTS vchord WITH SCHEMA public; + + +-- +-- Name: EXTENSION vchord; Type: COMMENT; Schema: -; Owner: +-- + +-- COMMENT ON EXTENSION vchord IS 'vchord: Vector database plugin for Postgres, written in Rust, specifically designed for LLM'; + + +-- +-- Name: album_user_role_enum; Type: TYPE; Schema: public; Owner: postgres +-- + +-- ENuM not supported in sqlite +-- CREATE TYPE public.album_user_role_enum AS ENUM ( +-- 'owner', +-- 'editor', +-- 'viewer' +-- ); + + +-- ALTER TYPE public.album_user_role_enum OWNER TO postgres; + +-- +-- Name: asset_checksum_algorithm_enum; Type: TYPE; Schema: public; Owner: postgres +-- + +-- CREATE TYPE public.asset_checksum_algorithm_enum AS ENUM ( +-- 'sha1', +-- 'sha1-path' +-- ); + + +-- ALTER TYPE public.asset_checksum_algorithm_enum OWNER TO postgres; + +-- +-- Name: asset_visibility_enum; Type: TYPE; Schema: public; Owner: postgres +-- + +-- CREATE TYPE public.asset_visibility_enum AS ENUM ( +-- 'archive', +-- 'timeline', +-- 'hidden', +-- 'locked' +-- ); + + +-- ALTER TYPE public.asset_visibility_enum OWNER TO postgres; + +-- +-- Name: assets_status_enum; Type: TYPE; Schema: public; Owner: postgres +-- + +-- CREATE TYPE public.assets_status_enum AS ENUM ( +-- 'active', +-- 'trashed', +-- 'deleted' +-- ); + + +-- ALTER TYPE public.assets_status_enum OWNER TO postgres; + +-- +-- Name: sourcetype; Type: TYPE; Schema: public; Owner: postgres +-- + +-- CREATE TYPE public.sourcetype AS ENUM ( +-- 'machine-learning', +-- 'exif', +-- 'manual' +-- ); + + +-- ALTER TYPE public.sourcetype OWNER TO postgres; + +-- +-- Name: video_stream_variant_codec_enum; Type: TYPE; Schema: public; Owner: postgres +-- + +-- CREATE TYPE public.video_stream_variant_codec_enum AS ENUM ( +-- 'av1', +-- 'hevc', +-- 'h264' +-- ); + + +-- ALTER TYPE public.video_stream_variant_codec_enum OWNER TO postgres; + +-- +-- Name: album_asset_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.album_asset_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO album_asset_audit ("albumId", "assetId") +-- SELECT "albumId", "assetId" FROM OLD +-- WHERE "albumId" IN (SELECT "id" FROM album WHERE "id" IN (SELECT "albumId" FROM OLD)); +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.album_asset_delete_audit() OWNER TO postgres; + +-- +-- Name: album_user_after_insert(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.album_user_after_insert() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- UPDATE album SET "updatedAt" = clock_timestamp(), "updateId" = immich_uuid_v7(clock_timestamp()) +-- WHERE "id" IN (SELECT "albumId" FROM inserted_rows) +-- AND NOT EXISTS (SELECT FROM inserted_rows WHERE role = 'owner'); +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.album_user_after_insert() OWNER TO postgres; + +-- +-- Name: album_user_delete(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.album_user_delete() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- DELETE FROM "album" +-- WHERE "album"."id" = OLD."albumId" +-- AND NOT EXISTS (SELECT "albumId" FROM "album_user" WHERE "album_user"."albumId" = "album"."id" AND "album_user"."role" = 'owner'); + +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.album_user_delete() OWNER TO postgres; + +-- +-- Name: album_user_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.album_user_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO album_audit ("albumId", "userId") +-- SELECT "albumId", "userId" +-- FROM OLD; + +-- IF pg_trigger_depth() = 1 THEN +-- INSERT INTO album_user_audit ("albumId", "userId") +-- SELECT "albumId", "userId" +-- FROM OLD; +-- END IF; + +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.album_user_delete_audit() OWNER TO postgres; + +-- +-- Name: asset_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO asset_audit ("assetId", "ownerId") +-- SELECT "id", "ownerId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_delete_audit() OWNER TO postgres; + +-- +-- Name: asset_edit_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_edit_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO asset_edit_audit ("editId", "assetId") +-- SELECT "id", "assetId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_edit_audit() OWNER TO postgres; + +-- +-- Name: asset_edit_delete(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_edit_delete() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- UPDATE asset +-- SET "isEdited" = false +-- FROM deleted_edit +-- WHERE asset.id = deleted_edit."assetId" AND asset."isEdited" +-- AND NOT EXISTS (SELECT FROM asset_edit edit WHERE edit."assetId" = asset.id); +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_edit_delete() OWNER TO postgres; + +-- +-- Name: asset_edit_insert(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_edit_insert() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- UPDATE asset +-- SET "isEdited" = true +-- FROM inserted_edit +-- WHERE asset.id = inserted_edit."assetId" AND NOT asset."isEdited"; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_edit_insert() OWNER TO postgres; + +-- +-- Name: asset_face_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_face_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO asset_face_audit ("assetFaceId", "assetId") +-- SELECT "id", "assetId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_face_audit() OWNER TO postgres; + +-- +-- Name: asset_metadata_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_metadata_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO asset_metadata_audit ("assetId", "key") +-- SELECT "assetId", "key" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_metadata_audit() OWNER TO postgres; + +-- +-- Name: asset_ocr_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.asset_ocr_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO asset_ocr_audit ("assetId") +-- SELECT "assetId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.asset_ocr_delete_audit() OWNER TO postgres; + +-- +-- Name: f_concat_ws(text, text[]); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.f_concat_ws(text, text[]) RETURNS text +-- LANGUAGE sql IMMUTABLE PARALLEL SAFE +-- AS $_$SELECT array_to_string($2, $1)$_$; + + +-- ALTER FUNCTION public.f_concat_ws(text, text[]) OWNER TO postgres; + +-- +-- Name: f_unaccent(text); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.f_unaccent(text) RETURNS text +-- LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE +-- RETURN public.unaccent('public.unaccent'::regdictionary, $1); + + +-- ALTER FUNCTION public.f_unaccent(text) OWNER TO postgres; + +-- +-- Name: immich_uuid_v7(timestamp with time zone); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.immich_uuid_v7(p_timestamp timestamp with time zone DEFAULT clock_timestamp()) RETURNS uuid +-- LANGUAGE sql +-- AS $$ +-- select encode( +-- set_bit( +-- set_bit( +-- overlay(uuid_send(gen_random_uuid()) +-- placing substring(int8send(floor(extract(epoch from p_timestamp) * 1000)::bigint) from 3) +-- from 1 for 6 +-- ), +-- 52, 1 +-- ), +-- 53, 1 +-- ), +-- 'hex')::uuid; +-- $$; + + +-- ALTER FUNCTION public.immich_uuid_v7(p_timestamp timestamp with time zone) OWNER TO postgres; + +-- +-- Name: ll_to_earth_public(double precision, double precision); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.ll_to_earth_public(latitude double precision, longitude double precision) RETURNS public.earth +-- LANGUAGE sql IMMUTABLE STRICT PARALLEL SAFE +-- AS $$ +-- SELECT public.cube(public.cube(public.cube(public.earth()*cos(radians(latitude))*cos(radians(longitude))),public.earth()*cos(radians(latitude))*sin(radians(longitude))),public.earth()*sin(radians(latitude)))::public.earth +-- $$; + + +-- ALTER FUNCTION public.ll_to_earth_public(latitude double precision, longitude double precision) OWNER TO postgres; + +-- +-- Name: memory_asset_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.memory_asset_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO memory_asset_audit ("memoryId", "assetId") +-- SELECT "memoriesId", "assetId" FROM OLD +-- WHERE "memoriesId" IN (SELECT "id" FROM memory WHERE "id" IN (SELECT "memoriesId" FROM OLD)); +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.memory_asset_delete_audit() OWNER TO postgres; + +-- +-- Name: memory_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.memory_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO memory_audit ("memoryId", "userId") +-- SELECT "id", "ownerId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.memory_delete_audit() OWNER TO postgres; + +-- +-- Name: partner_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.partner_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO partner_audit ("sharedById", "sharedWithId") +-- SELECT "sharedById", "sharedWithId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.partner_delete_audit() OWNER TO postgres; + +-- +-- Name: person_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.person_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO person_audit ("personGroupId", "ownerId") +-- SELECT "personGroupId", "ownerId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.person_delete_audit() OWNER TO postgres; + +-- +-- Name: person_group_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.person_group_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO person_group_audit ("personGroupId", "clusterGroupId") +-- SELECT "id", "clusterGroupId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.person_group_delete_audit() OWNER TO postgres; + +-- +-- Name: stack_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.stack_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO stack_audit ("stackId", "userId") +-- SELECT "id", "ownerId" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.stack_delete_audit() OWNER TO postgres; + +-- +-- Name: updated_at(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.updated_at() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- DECLARE +-- clock_timestamp TIMESTAMP := clock_timestamp(); +-- BEGIN +-- new."updatedAt" = clock_timestamp; +-- new."updateId" = immich_uuid_v7(clock_timestamp); +-- return new; +-- END; +-- $$; + + +-- ALTER FUNCTION public.updated_at() OWNER TO postgres; + +-- +-- Name: user_delete_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.user_delete_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO user_audit ("userId") +-- SELECT "id" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.user_delete_audit() OWNER TO postgres; + +-- +-- Name: user_metadata_audit(); Type: FUNCTION; Schema: public; Owner: postgres +-- + +-- CREATE FUNCTION public.user_metadata_audit() RETURNS trigger +-- LANGUAGE plpgsql +-- AS $$ +-- BEGIN +-- INSERT INTO user_metadata_audit ("userId", "key") +-- SELECT "userId", "key" +-- FROM OLD; +-- RETURN NULL; +-- END +-- $$; + + +-- ALTER FUNCTION public.user_metadata_audit() OWNER TO postgres; + +-- SET default_tablespace = ''; + +-- SET default_table_access_method = heap; + +-- +-- Name: activity; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE activity ( + id uuid NOT NULL, -- DEFAULT uuid_generate_v4() + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "albumId" uuid NOT NULL, + "userId" uuid NOT NULL, + "assetId" uuid, + comment text, + "isLiked" boolean DEFAULT false NOT NULL, + "updateId" uuid NOT NULL, -- DEFAULT immich_uuid_v7() + CONSTRAINT activity_like_check CHECK ((((comment IS NULL) AND ("isLiked" = true)) OR ((comment IS NOT NULL) AND ("isLiked" = false)))) +); + + +-- ALTER TABLE public.activity OWNER TO postgres; + +-- +-- Name: album; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE album ( + id uuid NOT NULL, --DEFAULT public.uuid_generate_v4() + "albumName" text DEFAULT 'Untitled Album' NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "albumThumbnailAssetId" uuid, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + description text, + "deletedAt" timestamp with time zone, + "isActivityEnabled" boolean DEFAULT true NOT NULL, + "order" text DEFAULT 'desc' NOT NULL, + "updateId" uuid NOT NULL -- DEFAULT public.immich_uuid_v7() +); + + +-- ALTER TABLE public.album OWNER TO postgres; + +-- +-- Name: COLUMN album."albumThumbnailAssetId"; Type: COMMENT; Schema: public; Owner: postgres +-- + +-- COMMENT ON COLUMN album."albumThumbnailAssetId" IS 'Asset ID to be used as thumbnail'; + + +-- +-- Name: album_asset; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE album_asset ( + "albumId" uuid NOT NULL, + "assetId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid NOT NULL -- DEFAULT public.immich_uuid_v7() +); + + +-- ALTER TABLE public.album_asset OWNER TO postgres; + +-- +-- Name: album_asset_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE album_asset_audit ( + id uuid NOT NULL, -- DEFAULT public.immich_uuid_v7() + "albumId" uuid NOT NULL, + "assetId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +-- ALTER TABLE public.album_asset_audit OWNER TO postgres; + +-- +-- Name: album_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE album_audit ( + id uuid NOT NULL, -- DEFAULT immich_uuid_v7() + "albumId" uuid NOT NULL, + "userId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +-- ALTER TABLE public.album_audit OWNER TO postgres; + +-- +-- Name: album_user; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE album_user ( + "albumId" uuid NOT NULL, + "userId" uuid NOT NULL, + role text DEFAULT 'editor' NOT NULL, + "updateId" uuid NOT NULL, -- DEFAULT public.immich_uuid_v7() + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "createId" uuid NOT NULL, -- DEFAULT public.immich_uuid_v7() + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + CONSTRAINT role_check CHECK (role = "editor" OR role = "owner" OR role = "viewer") +); + + +-- ALTER TABLE public.album_user OWNER TO postgres; + +-- +-- Name: album_user_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE album_user_audit ( + id uuid NOT NULL, -- DEFAULT public.immich_uuid_v7() + "albumId" uuid NOT NULL, + "userId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +-- ALTER TABLE public.album_user_audit OWNER TO postgres; + +-- +-- Name: api_key; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE api_key ( + name text NOT NULL, + key bytea NOT NULL, + "userId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + permissions character varying[] NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.api_key OWNER TO postgres; + +-- +-- Name: asset; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "ownerId" uuid NOT NULL, + type character varying NOT NULL, + "originalPath" character varying NOT NULL, + "fileCreatedAt" timestamp with time zone NOT NULL, + "fileModifiedAt" timestamp with time zone NOT NULL, + "isFavorite" boolean DEFAULT false NOT NULL, + duration integer, + checksum bytea NOT NULL, + "livePhotoVideoId" uuid, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "originalFileName" character varying NOT NULL, + thumbhash bytea, + "isOffline" boolean DEFAULT false NOT NULL, + "libraryId" uuid, + "isExternal" boolean DEFAULT false NOT NULL, + "deletedAt" timestamp with time zone, + "localDateTime" timestamp with time zone NOT NULL, + "stackId" uuid, + "duplicateId" uuid, + status public.assets_status_enum DEFAULT 'active'::public.assets_status_enum NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + visibility public.asset_visibility_enum DEFAULT 'timeline'::public.asset_visibility_enum NOT NULL, + width integer, + height integer, + "isEdited" boolean DEFAULT false NOT NULL, + "checksumAlgorithm" public.asset_checksum_algorithm_enum NOT NULL +); + + +ALTER TABLE public.asset OWNER TO postgres; + +-- +-- Name: asset_audio; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_audio ( + "assetId" uuid NOT NULL, + bitrate integer NOT NULL, + index smallint NOT NULL, + profile smallint, + "codecName" text NOT NULL +); + + +ALTER TABLE public.asset_audio OWNER TO postgres; + +-- +-- Name: asset_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "assetId" uuid NOT NULL, + "ownerId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.asset_audit OWNER TO postgres; + +-- +-- Name: asset_edit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_edit ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "assetId" uuid NOT NULL, + action character varying NOT NULL, + parameters jsonb NOT NULL, + sequence integer NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.asset_edit OWNER TO postgres; + +-- +-- Name: asset_edit_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_edit_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "editId" uuid NOT NULL, + "assetId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.asset_edit_audit OWNER TO postgres; + +-- +-- Name: asset_exif; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_exif ( + "assetId" uuid NOT NULL, + make character varying, + model character varying, + "exifImageWidth" integer, + "exifImageHeight" integer, + "fileSizeInByte" bigint, + orientation character varying, + "dateTimeOriginal" timestamp with time zone, + "modifyDate" timestamp with time zone, + "lensModel" character varying, + "fNumber" double precision, + "focalLength" double precision, + iso integer, + latitude double precision, + longitude double precision, + city character varying, + state character varying, + country character varying, + description text DEFAULT ''::text NOT NULL, + fps double precision, + "exposureTime" character varying, + "livePhotoCID" character varying, + "timeZone" character varying, + "projectionType" character varying, + "profileDescription" character varying, + colorspace character varying, + "bitsPerSample" integer, + "autoStackId" character varying, + rating integer, + "updatedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "lockedProperties" character varying[], + tags character varying[] +); + + +ALTER TABLE public.asset_exif OWNER TO postgres; + +-- +-- Name: asset_face; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_face ( + "assetId" uuid NOT NULL, + "personGroupId" uuid, + "imageWidth" integer DEFAULT 0 NOT NULL, + "imageHeight" integer DEFAULT 0 NOT NULL, + "boundingBoxX1" integer DEFAULT 0 NOT NULL, + "boundingBoxY1" integer DEFAULT 0 NOT NULL, + "boundingBoxX2" integer DEFAULT 0 NOT NULL, + "boundingBoxY2" integer DEFAULT 0 NOT NULL, + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "sourceType" public.sourcetype DEFAULT 'machine-learning'::public.sourcetype NOT NULL, + "deletedAt" timestamp with time zone, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "isVisible" boolean DEFAULT true NOT NULL +); + + +ALTER TABLE public.asset_face OWNER TO postgres; + +-- +-- Name: asset_face_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_face_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "assetFaceId" uuid NOT NULL, + "assetId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.asset_face_audit OWNER TO postgres; + +-- +-- Name: asset_file; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_file ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "assetId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + type character varying NOT NULL, + path character varying NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "isEdited" boolean DEFAULT false NOT NULL, + "isProgressive" boolean DEFAULT false NOT NULL, + "isTransparent" boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.asset_file OWNER TO postgres; + +-- +-- Name: asset_job_status; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_job_status ( + "assetId" uuid NOT NULL, + "facesRecognizedAt" timestamp with time zone, + "metadataExtractedAt" timestamp with time zone, + "duplicatesDetectedAt" timestamp with time zone, + "ocrAt" timestamp with time zone +); + + +ALTER TABLE public.asset_job_status OWNER TO postgres; + +-- +-- Name: asset_keyframe; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_keyframe ( + "assetId" uuid NOT NULL, + pts integer[] NOT NULL, + "accDuration" integer[] NOT NULL, + "ownDuration" integer[] NOT NULL, + "totalDuration" integer NOT NULL, + "packetCount" integer NOT NULL, + "outputFrames" integer NOT NULL +); + + +ALTER TABLE public.asset_keyframe OWNER TO postgres; + +-- +-- Name: asset_metadata; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_metadata ( + "assetId" uuid NOT NULL, + key character varying NOT NULL, + value jsonb NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +ALTER TABLE public.asset_metadata OWNER TO postgres; + +-- +-- Name: asset_metadata_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_metadata_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "assetId" uuid NOT NULL, + key character varying NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.asset_metadata_audit OWNER TO postgres; + +-- +-- Name: asset_ocr; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_ocr ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "assetId" uuid NOT NULL, + x1 real NOT NULL, + y1 real NOT NULL, + x2 real NOT NULL, + y2 real NOT NULL, + x3 real NOT NULL, + y3 real NOT NULL, + x4 real NOT NULL, + y4 real NOT NULL, + "boxScore" real NOT NULL, + "textScore" real NOT NULL, + text text NOT NULL, + "isVisible" boolean DEFAULT true NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +ALTER TABLE public.asset_ocr OWNER TO postgres; + +-- +-- Name: asset_ocr_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_ocr_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "assetId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.asset_ocr_audit OWNER TO postgres; + +-- +-- Name: asset_video; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.asset_video ( + "assetId" uuid NOT NULL, + bitrate integer NOT NULL, + "frameCount" integer NOT NULL, + "timeBase" integer NOT NULL, + index smallint NOT NULL, + profile smallint, + level smallint, + "colorPrimaries" smallint NOT NULL, + "colorTransfer" smallint NOT NULL, + "colorMatrix" smallint NOT NULL, + "dvProfile" smallint, + "dvLevel" smallint, + "dvBlSignalCompatibilityId" smallint, + "codecName" text NOT NULL, + "formatName" text NOT NULL, + "formatLongName" text NOT NULL, + "pixelFormat" text NOT NULL +); + + +ALTER TABLE public.asset_video OWNER TO postgres; + +-- +-- Name: cluster_group; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.cluster_group ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + name character varying, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.cluster_group OWNER TO postgres; + +-- +-- Name: cluster_group_request; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.cluster_group_request ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "clusterGroupId" uuid NOT NULL, + "userId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +ALTER TABLE public.cluster_group_request OWNER TO postgres; + +-- +-- Name: face_search; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.face_search ( + "faceId" uuid NOT NULL, + embedding public.vector(512) NOT NULL +); + + +ALTER TABLE public.face_search OWNER TO postgres; + +-- +-- Name: geodata_places; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.geodata_places ( + id integer NOT NULL, + name character varying(200) NOT NULL, + longitude double precision NOT NULL, + latitude double precision NOT NULL, + "countryCode" character(2) NOT NULL, + "admin1Code" character varying(20), + "admin2Code" character varying(80), + "modificationDate" date NOT NULL, + "admin1Name" character varying, + "admin2Name" character varying, + "alternateNames" character varying +); + + +ALTER TABLE public.geodata_places OWNER TO postgres; + +-- +-- Name: integrity_report; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.integrity_report ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + type character varying NOT NULL, + path character varying NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "assetId" uuid, + "fileAssetId" uuid +); + + +ALTER TABLE public.integrity_report OWNER TO postgres; + +-- +-- Name: kysely_migrations; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.kysely_migrations ( + name character varying(255) NOT NULL, + "timestamp" character varying(255) NOT NULL +); + + +ALTER TABLE public.kysely_migrations OWNER TO postgres; + +-- +-- Name: kysely_migrations_lock; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.kysely_migrations_lock ( + id character varying(255) NOT NULL, + is_locked integer DEFAULT 0 NOT NULL +); + + +ALTER TABLE public.kysely_migrations_lock OWNER TO postgres; + +-- +-- Name: library; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.library ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + name character varying NOT NULL, + "ownerId" uuid NOT NULL, + "importPaths" text[] NOT NULL, + "exclusionPatterns" text[] NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "deletedAt" timestamp with time zone, + "refreshedAt" timestamp with time zone, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.library OWNER TO postgres; + +-- +-- Name: memory; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.memory ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "deletedAt" timestamp with time zone, + "ownerId" uuid NOT NULL, + type character varying NOT NULL, + data jsonb NOT NULL, + "isSaved" boolean DEFAULT false NOT NULL, + "memoryAt" timestamp with time zone NOT NULL, + "seenAt" timestamp with time zone, + "showAt" timestamp with time zone, + "hideAt" timestamp with time zone, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.memory OWNER TO postgres; + +-- +-- Name: memory_asset; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.memory_asset ( + "memoriesId" uuid NOT NULL, + "assetId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.memory_asset OWNER TO postgres; + +-- +-- Name: memory_asset_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.memory_asset_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "memoryId" uuid NOT NULL, + "assetId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.memory_asset_audit OWNER TO postgres; + +-- +-- Name: memory_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.memory_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "memoryId" uuid NOT NULL, + "userId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.memory_audit OWNER TO postgres; + +-- +-- Name: migration_overrides; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.migration_overrides ( + name character varying NOT NULL, + value jsonb NOT NULL +); + + +ALTER TABLE public.migration_overrides OWNER TO postgres; + +-- +-- Name: move_history; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.move_history ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "entityId" uuid NOT NULL, + "pathType" character varying NOT NULL, + "oldPath" character varying NOT NULL, + "newPath" character varying NOT NULL +); + + +ALTER TABLE public.move_history OWNER TO postgres; + +-- +-- Name: naturalearth_countries; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.naturalearth_countries ( + id integer NOT NULL, + admin character varying(50) NOT NULL, + admin_a3 character varying(3) NOT NULL, + type character varying(50) NOT NULL, + coordinates polygon NOT NULL +); + + +ALTER TABLE public.naturalearth_countries OWNER TO postgres; + +-- +-- Name: naturalearth_countries_tmp_id_seq; Type: SEQUENCE; Schema: public; Owner: postgres +-- + +ALTER TABLE public.naturalearth_countries ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY ( + SEQUENCE NAME public.naturalearth_countries_tmp_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + MAXVALUE 2147483647 + CACHE 1 +); + + +-- +-- Name: notification; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.notification ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "deletedAt" timestamp with time zone, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "userId" uuid, + level character varying DEFAULT 'info'::character varying NOT NULL, + type character varying DEFAULT 'info'::character varying NOT NULL, + data jsonb, + title character varying NOT NULL, + description text, + "readAt" timestamp with time zone +); + + +ALTER TABLE public.notification OWNER TO postgres; + +-- +-- Name: ocr_search; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.ocr_search ( + "assetId" uuid NOT NULL, + text text NOT NULL +); + + +ALTER TABLE public.ocr_search OWNER TO postgres; + +-- +-- Name: partner; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.partner ( + "sharedById" uuid NOT NULL, + "sharedWithId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "inTimeline" boolean DEFAULT false NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "createId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.partner OWNER TO postgres; + +-- +-- Name: partner_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.partner_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "sharedById" uuid NOT NULL, + "sharedWithId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.partner_audit OWNER TO postgres; + +-- +-- Name: person; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.person ( + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "ownerId" uuid NOT NULL, + name character varying DEFAULT ''::character varying NOT NULL, + "thumbnailPath" character varying DEFAULT ''::character varying NOT NULL, + "isHidden" boolean DEFAULT false NOT NULL, + "birthDate" date, + "faceAssetId" uuid, + "isFavorite" boolean DEFAULT false NOT NULL, + color character varying, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "personGroupId" uuid NOT NULL, + CONSTRAINT "person_birthDate_chk" CHECK (("birthDate" <= CURRENT_DATE)) +); + + +ALTER TABLE public.person OWNER TO postgres; + +-- +-- Name: person_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.person_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "ownerId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL, + "personGroupId" uuid NOT NULL +); + + +ALTER TABLE public.person_audit OWNER TO postgres; + +-- +-- Name: person_group; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.person_group ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "clusterGroupId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "createId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.person_group OWNER TO postgres; + +-- +-- Name: person_group_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.person_group_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "personGroupId" uuid NOT NULL, + "clusterGroupId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.person_group_audit OWNER TO postgres; + +-- +-- Name: plugin; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.plugin ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + enabled boolean DEFAULT true NOT NULL, + name character varying NOT NULL, + version character varying NOT NULL, + title character varying NOT NULL, + description character varying NOT NULL, + author character varying NOT NULL, + "wasmBytes" bytea NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + templates jsonb NOT NULL, + sha256hash bytea NOT NULL +); + + +ALTER TABLE public.plugin OWNER TO postgres; + +-- +-- Name: plugin_method; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.plugin_method ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "pluginId" uuid NOT NULL, + name character varying NOT NULL, + title character varying NOT NULL, + description character varying NOT NULL, + types character varying[] NOT NULL, + "hostFunctions" boolean DEFAULT false NOT NULL, + "uiHints" character varying[] DEFAULT '{}'::character varying[] NOT NULL, + schema jsonb, + "allowedHosts" character varying[] DEFAULT '{}'::character varying[] NOT NULL +); + + +ALTER TABLE public.plugin_method OWNER TO postgres; + +-- +-- Name: session; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.session ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + token bytea NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "userId" uuid NOT NULL, + "deviceType" character varying DEFAULT ''::character varying NOT NULL, + "deviceOS" character varying DEFAULT ''::character varying NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "pinExpiresAt" timestamp with time zone, + "expiresAt" timestamp with time zone, + "parentId" uuid, + "isPendingSyncReset" boolean DEFAULT false NOT NULL, + "appVersion" character varying, + "oauthSid" character varying, + "oauthBearerToken" character varying +); + + +ALTER TABLE public.session OWNER TO postgres; + +-- +-- Name: session_sync_checkpoint; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.session_sync_checkpoint ( + "sessionId" uuid NOT NULL, + type character varying NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + ack character varying NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.session_sync_checkpoint OWNER TO postgres; + +-- +-- Name: shared_link; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.shared_link ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + description character varying, + "userId" uuid NOT NULL, + key bytea NOT NULL, + type character varying NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "expiresAt" timestamp with time zone, + "allowUpload" boolean DEFAULT false NOT NULL, + "albumId" uuid, + "allowDownload" boolean DEFAULT true NOT NULL, + "showExif" boolean DEFAULT true NOT NULL, + password character varying, + slug character varying +); + + +ALTER TABLE public.shared_link OWNER TO postgres; + +-- +-- Name: shared_link_asset; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.shared_link_asset ( + "assetId" uuid NOT NULL, + "sharedLinkId" uuid NOT NULL +); + + +ALTER TABLE public.shared_link_asset OWNER TO postgres; + +-- +-- Name: smart_search; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.smart_search ( + "assetId" uuid NOT NULL, + embedding public.vector(512) NOT NULL +); + + +ALTER TABLE public.smart_search OWNER TO postgres; + +-- +-- Name: stack; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.stack ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "primaryAssetId" uuid NOT NULL, + "ownerId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.stack OWNER TO postgres; + +-- +-- Name: stack_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.stack_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "stackId" uuid NOT NULL, + "userId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.stack_audit OWNER TO postgres; + +-- +-- Name: system_metadata; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.system_metadata ( + key character varying NOT NULL, + value jsonb NOT NULL +); + + +ALTER TABLE public.system_metadata OWNER TO postgres; + +-- +-- Name: tag; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.tag ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "userId" uuid NOT NULL, + value character varying NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + color character varying, + "parentId" uuid, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.tag OWNER TO postgres; + +-- +-- Name: tag_asset; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.tag_asset ( + "assetId" uuid NOT NULL, + "tagId" uuid NOT NULL +); + + +ALTER TABLE public.tag_asset OWNER TO postgres; + +-- +-- Name: tag_closure; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.tag_closure ( + id_ancestor uuid NOT NULL, + id_descendant uuid NOT NULL +); + + +ALTER TABLE public.tag_closure OWNER TO postgres; + +-- +-- Name: user; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public."user" ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + email character varying NOT NULL, + password character varying, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "profileImagePath" character varying DEFAULT ''::character varying NOT NULL, + "isAdmin" boolean DEFAULT false NOT NULL, + "shouldChangePassword" boolean DEFAULT true NOT NULL, + "deletedAt" timestamp with time zone, + "oauthId" character varying DEFAULT ''::character varying NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "storageLabel" character varying, + name character varying DEFAULT ''::character varying NOT NULL, + "quotaSizeInBytes" bigint, + "quotaUsageInBytes" bigint DEFAULT 0 NOT NULL, + status character varying DEFAULT 'active'::character varying NOT NULL, + "profileChangedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "avatarColor" character varying, + "pinCode" character varying, + "clusterGroupId" uuid NOT NULL +); + + +ALTER TABLE public."user" OWNER TO postgres; + +-- +-- Name: user_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.user_audit ( + "userId" uuid NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL, + id uuid DEFAULT public.immich_uuid_v7() NOT NULL +); + + +ALTER TABLE public.user_audit OWNER TO postgres; + +-- +-- Name: user_metadata; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.user_metadata ( + "userId" uuid NOT NULL, + key character varying NOT NULL, + value jsonb NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +ALTER TABLE public.user_metadata OWNER TO postgres; + +-- +-- Name: user_metadata_audit; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.user_metadata_audit ( + id uuid DEFAULT public.immich_uuid_v7() NOT NULL, + "userId" uuid NOT NULL, + key character varying NOT NULL, + "deletedAt" timestamp with time zone DEFAULT clock_timestamp() NOT NULL +); + + +ALTER TABLE public.user_metadata_audit OWNER TO postgres; + +-- +-- Name: version_history; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.version_history ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + version character varying NOT NULL +); + + +ALTER TABLE public.version_history OWNER TO postgres; + +-- +-- Name: video_stream_segment; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.video_stream_segment ( + "variantId" uuid NOT NULL, + index integer NOT NULL, + "durationUs" integer NOT NULL +); + + +ALTER TABLE public.video_stream_segment OWNER TO postgres; + +-- +-- Name: video_stream_session; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.video_stream_session ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "assetId" uuid NOT NULL, + "expiresAt" timestamp with time zone NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL +); + + +ALTER TABLE public.video_stream_session OWNER TO postgres; + +-- +-- Name: video_stream_variant; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.video_stream_variant ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "sessionId" uuid NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + bitrate integer NOT NULL, + codec public.video_stream_variant_codec_enum NOT NULL, + resolution smallint NOT NULL +); + + +ALTER TABLE public.video_stream_variant OWNER TO postgres; + +-- +-- Name: workflow; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workflow ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "ownerId" uuid NOT NULL, + trigger character varying NOT NULL, + name character varying, + description character varying, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updatedAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "updateId" uuid DEFAULT public.immich_uuid_v7() NOT NULL, + enabled boolean DEFAULT true NOT NULL, + logging boolean DEFAULT false NOT NULL +); + + +ALTER TABLE public.workflow OWNER TO postgres; + +-- +-- Name: workflow_log; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workflow_log ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + "createdAt" timestamp with time zone DEFAULT current_timestamp NOT NULL, + "workflowId" uuid NOT NULL, + result character varying NOT NULL, + "workflowStepId" uuid, + "triggerDataId" uuid, + "runId" uuid NOT NULL +); + + +ALTER TABLE public.workflow_log OWNER TO postgres; + +-- +-- Name: workflow_step; Type: TABLE; Schema: public; Owner: postgres +-- + +CREATE TABLE public.workflow_step ( + id uuid DEFAULT public.uuid_generate_v4() NOT NULL, + enabled boolean DEFAULT true NOT NULL, + "workflowId" uuid NOT NULL, + "pluginMethodId" uuid NOT NULL, + config jsonb, + "order" integer NOT NULL +); + + +ALTER TABLE public.workflow_step OWNER TO postgres; + +-- +-- Name: move_history UQ_entityId_pathType; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.move_history + ADD CONSTRAINT "UQ_entityId_pathType" UNIQUE ("entityId", "pathType"); + + +-- +-- Name: move_history UQ_newPath; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.move_history + ADD CONSTRAINT "UQ_newPath" UNIQUE ("newPath"); + + +-- +-- Name: activity activity_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.activity + ADD CONSTRAINT activity_pkey PRIMARY KEY (id); + + +-- +-- Name: album_asset_audit album_asset_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_asset_audit + ADD CONSTRAINT album_asset_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: album_asset album_asset_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_asset + ADD CONSTRAINT album_asset_pkey PRIMARY KEY ("albumId", "assetId"); + + +-- +-- Name: album_audit album_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_audit + ADD CONSTRAINT album_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: album album_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album + ADD CONSTRAINT album_pkey PRIMARY KEY (id); + + +-- +-- Name: album_user_audit album_user_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_user_audit + ADD CONSTRAINT album_user_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: album_user album_user_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_user + ADD CONSTRAINT album_user_pkey PRIMARY KEY ("albumId", "userId"); + + +-- +-- Name: api_key api_key_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.api_key + ADD CONSTRAINT api_key_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_audio asset_audio_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_audio + ADD CONSTRAINT asset_audio_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: asset_audit asset_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_audit + ADD CONSTRAINT asset_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_edit asset_edit_assetId_sequence_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_edit + ADD CONSTRAINT "asset_edit_assetId_sequence_uq" UNIQUE ("assetId", sequence); + + +-- +-- Name: asset_edit_audit asset_edit_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_edit_audit + ADD CONSTRAINT asset_edit_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_edit asset_edit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_edit + ADD CONSTRAINT asset_edit_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_exif asset_exif_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_exif + ADD CONSTRAINT asset_exif_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: asset_face_audit asset_face_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_face_audit + ADD CONSTRAINT asset_face_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_face asset_face_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_face + ADD CONSTRAINT asset_face_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_file asset_file_assetId_type_isEdited_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_file + ADD CONSTRAINT "asset_file_assetId_type_isEdited_uq" UNIQUE ("assetId", type, "isEdited"); + + +-- +-- Name: asset_file asset_file_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_file + ADD CONSTRAINT asset_file_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_job_status asset_job_status_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_job_status + ADD CONSTRAINT asset_job_status_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: asset_keyframe asset_keyframe_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_keyframe + ADD CONSTRAINT asset_keyframe_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: asset_metadata_audit asset_metadata_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_metadata_audit + ADD CONSTRAINT asset_metadata_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_metadata asset_metadata_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_metadata + ADD CONSTRAINT asset_metadata_pkey PRIMARY KEY ("assetId", key); + + +-- +-- Name: asset_ocr_audit asset_ocr_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_ocr_audit + ADD CONSTRAINT asset_ocr_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_ocr asset_ocr_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_ocr + ADD CONSTRAINT asset_ocr_pkey PRIMARY KEY (id); + + +-- +-- Name: asset asset_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset + ADD CONSTRAINT asset_pkey PRIMARY KEY (id); + + +-- +-- Name: asset_video asset_video_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_video + ADD CONSTRAINT asset_video_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: cluster_group cluster_group_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.cluster_group + ADD CONSTRAINT cluster_group_pkey PRIMARY KEY (id); + + +-- +-- Name: cluster_group_request cluster_group_request_clusterGroupId_userId_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.cluster_group_request + ADD CONSTRAINT "cluster_group_request_clusterGroupId_userId_uq" UNIQUE ("clusterGroupId", "userId"); + + +-- +-- Name: cluster_group_request cluster_group_request_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.cluster_group_request + ADD CONSTRAINT cluster_group_request_pkey PRIMARY KEY (id); + + +-- +-- Name: face_search face_search_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.face_search + ADD CONSTRAINT face_search_pkey PRIMARY KEY ("faceId"); + + +-- +-- Name: geodata_places geodata_places_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.geodata_places + ADD CONSTRAINT geodata_places_pkey PRIMARY KEY (id) WITH (fillfactor='100'); + + +-- +-- Name: integrity_report integrity_report_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.integrity_report + ADD CONSTRAINT integrity_report_pkey PRIMARY KEY (id); + + +-- +-- Name: integrity_report integrity_report_type_path_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.integrity_report + ADD CONSTRAINT integrity_report_type_path_uq UNIQUE (type, path); + + +-- +-- Name: kysely_migrations_lock kysely_migrations_lock_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.kysely_migrations_lock + ADD CONSTRAINT kysely_migrations_lock_pkey PRIMARY KEY (id); + + +-- +-- Name: kysely_migrations kysely_migrations_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.kysely_migrations + ADD CONSTRAINT kysely_migrations_pkey PRIMARY KEY (name); + + +-- +-- Name: library library_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.library + ADD CONSTRAINT library_pkey PRIMARY KEY (id); + + +-- +-- Name: memory_asset_audit memory_asset_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory_asset_audit + ADD CONSTRAINT memory_asset_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: memory_asset memory_asset_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory_asset + ADD CONSTRAINT memory_asset_pkey PRIMARY KEY ("memoriesId", "assetId"); + + +-- +-- Name: memory_audit memory_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory_audit + ADD CONSTRAINT memory_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: memory memory_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory + ADD CONSTRAINT memory_pkey PRIMARY KEY (id); + + +-- +-- Name: migration_overrides migration_overrides_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.migration_overrides + ADD CONSTRAINT migration_overrides_pkey PRIMARY KEY (name); + + +-- +-- Name: move_history move_history_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.move_history + ADD CONSTRAINT move_history_pkey PRIMARY KEY (id); + + +-- +-- Name: naturalearth_countries naturalearth_countries_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.naturalearth_countries + ADD CONSTRAINT naturalearth_countries_pkey PRIMARY KEY (id) WITH (fillfactor='100'); + + +-- +-- Name: notification notification_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.notification + ADD CONSTRAINT notification_pkey PRIMARY KEY (id); + + +-- +-- Name: ocr_search ocr_search_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.ocr_search + ADD CONSTRAINT ocr_search_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: partner_audit partner_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.partner_audit + ADD CONSTRAINT partner_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: partner partner_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.partner + ADD CONSTRAINT partner_pkey PRIMARY KEY ("sharedById", "sharedWithId"); + + +-- +-- Name: person_audit person_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person_audit + ADD CONSTRAINT person_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: person_group_audit person_group_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person_group_audit + ADD CONSTRAINT person_group_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: person_group person_group_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person_group + ADD CONSTRAINT person_group_pkey PRIMARY KEY (id); + + +-- +-- Name: person person_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person + ADD CONSTRAINT person_pkey PRIMARY KEY ("ownerId", "personGroupId"); + + +-- +-- Name: plugin_method plugin_method_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.plugin_method + ADD CONSTRAINT plugin_method_pkey PRIMARY KEY (id); + + +-- +-- Name: plugin_method plugin_method_pluginId_name_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.plugin_method + ADD CONSTRAINT "plugin_method_pluginId_name_uq" UNIQUE ("pluginId", name); + + +-- +-- Name: plugin plugin_name_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.plugin + ADD CONSTRAINT plugin_name_uq UNIQUE (name); + + +-- +-- Name: plugin plugin_name_version_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.plugin + ADD CONSTRAINT plugin_name_version_uq UNIQUE (name, version); + + +-- +-- Name: plugin plugin_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.plugin + ADD CONSTRAINT plugin_pkey PRIMARY KEY (id); + + +-- +-- Name: session session_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.session + ADD CONSTRAINT session_pkey PRIMARY KEY (id); + + +-- +-- Name: session_sync_checkpoint session_sync_checkpoint_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.session_sync_checkpoint + ADD CONSTRAINT session_sync_checkpoint_pkey PRIMARY KEY ("sessionId", type); + + +-- +-- Name: shared_link_asset shared_link_asset_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link_asset + ADD CONSTRAINT shared_link_asset_pkey PRIMARY KEY ("assetId", "sharedLinkId"); + + +-- +-- Name: shared_link shared_link_key_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link + ADD CONSTRAINT shared_link_key_uq UNIQUE (key); + + +-- +-- Name: shared_link shared_link_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link + ADD CONSTRAINT shared_link_pkey PRIMARY KEY (id); + + +-- +-- Name: shared_link shared_link_slug_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link + ADD CONSTRAINT shared_link_slug_uq UNIQUE (slug); + + +-- +-- Name: smart_search smart_search_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.smart_search + ADD CONSTRAINT smart_search_pkey PRIMARY KEY ("assetId"); + + +-- +-- Name: stack_audit stack_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.stack_audit + ADD CONSTRAINT stack_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: stack stack_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.stack + ADD CONSTRAINT stack_pkey PRIMARY KEY (id); + + +-- +-- Name: stack stack_primaryAssetId_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.stack + ADD CONSTRAINT "stack_primaryAssetId_uq" UNIQUE ("primaryAssetId"); + + +-- +-- Name: system_metadata system_metadata_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.system_metadata + ADD CONSTRAINT system_metadata_pkey PRIMARY KEY (key); + + +-- +-- Name: tag_asset tag_asset_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag_asset + ADD CONSTRAINT tag_asset_pkey PRIMARY KEY ("assetId", "tagId"); + + +-- +-- Name: tag_closure tag_closure_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag_closure + ADD CONSTRAINT tag_closure_pkey PRIMARY KEY (id_ancestor, id_descendant); + + +-- +-- Name: tag tag_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT tag_pkey PRIMARY KEY (id); + + +-- +-- Name: tag tag_userId_value_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT "tag_userId_value_uq" UNIQUE ("userId", value); + + +-- +-- Name: user_audit user_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.user_audit + ADD CONSTRAINT user_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: user user_email_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."user" + ADD CONSTRAINT user_email_uq UNIQUE (email); + + +-- +-- Name: user_metadata_audit user_metadata_audit_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.user_metadata_audit + ADD CONSTRAINT user_metadata_audit_pkey PRIMARY KEY (id); + + +-- +-- Name: user_metadata user_metadata_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.user_metadata + ADD CONSTRAINT user_metadata_pkey PRIMARY KEY ("userId", key); + + +-- +-- Name: user user_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."user" + ADD CONSTRAINT user_pkey PRIMARY KEY (id); + + +-- +-- Name: user user_storageLabel_uq; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."user" + ADD CONSTRAINT "user_storageLabel_uq" UNIQUE ("storageLabel"); + + +-- +-- Name: version_history version_history_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.version_history + ADD CONSTRAINT version_history_pkey PRIMARY KEY (id); + + +-- +-- Name: video_stream_segment video_stream_segment_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.video_stream_segment + ADD CONSTRAINT video_stream_segment_pkey PRIMARY KEY ("variantId", index); + + +-- +-- Name: video_stream_session video_stream_session_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.video_stream_session + ADD CONSTRAINT video_stream_session_pkey PRIMARY KEY (id); + + +-- +-- Name: video_stream_variant video_stream_variant_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.video_stream_variant + ADD CONSTRAINT video_stream_variant_pkey PRIMARY KEY (id); + + +-- +-- Name: workflow_log workflow_log_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow_log + ADD CONSTRAINT workflow_log_pkey PRIMARY KEY (id); + + +-- +-- Name: workflow workflow_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow + ADD CONSTRAINT workflow_pkey PRIMARY KEY (id); + + +-- +-- Name: workflow_step workflow_step_pkey; Type: CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow_step + ADD CONSTRAINT workflow_step_pkey PRIMARY KEY (id); + + +-- +-- Name: IDX_asset_exif_gist_earthcoord; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_asset_exif_gist_earthcoord" ON public.asset_exif USING gist (public.ll_to_earth_public(latitude, longitude)); + + +-- +-- Name: IDX_geodata_gist_earthcoord; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_geodata_gist_earthcoord" ON public.geodata_places USING gist (public.ll_to_earth_public(latitude, longitude)); + + +-- +-- Name: IDX_user_metadata_audit_deleted_at; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_user_metadata_audit_deleted_at" ON public.user_metadata_audit USING btree ("deletedAt"); + + +-- +-- Name: IDX_user_metadata_audit_key; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_user_metadata_audit_key" ON public.user_metadata_audit USING btree (key); + + +-- +-- Name: IDX_user_metadata_audit_user_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_user_metadata_audit_user_id" ON public.user_metadata_audit USING btree ("userId"); + + +-- +-- Name: IDX_user_metadata_update_id; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_user_metadata_update_id" ON public.user_metadata USING btree ("updateId"); + + +-- +-- Name: IDX_user_metadata_updated_at; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "IDX_user_metadata_updated_at" ON public.user_metadata USING btree ("updatedAt"); + + +-- +-- Name: UQ_assets_owner_checksum; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE UNIQUE INDEX "UQ_assets_owner_checksum" ON public.asset USING btree ("ownerId", checksum) WHERE ("libraryId" IS NULL); + + +-- +-- Name: activity_albumId_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "activity_albumId_assetId_idx" ON public.activity USING btree ("albumId", "assetId"); + + +-- +-- Name: activity_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "activity_albumId_idx" ON public.activity USING btree ("albumId"); + + +-- +-- Name: activity_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "activity_assetId_idx" ON public.activity USING btree ("assetId"); + + +-- +-- Name: activity_like_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE UNIQUE INDEX activity_like_idx ON public.activity USING btree ("assetId", "userId", "albumId") WHERE ("isLiked" = true); + + +-- +-- Name: activity_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "activity_updateId_idx" ON public.activity USING btree ("updateId"); + + +-- +-- Name: activity_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "activity_userId_idx" ON public.activity USING btree ("userId"); + + +-- +-- Name: album_albumThumbnailAssetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_albumThumbnailAssetId_idx" ON public.album USING btree ("albumThumbnailAssetId"); + + +-- +-- Name: album_asset_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_asset_albumId_idx" ON public.album_asset USING btree ("albumId"); + + +-- +-- Name: album_asset_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_asset_assetId_idx" ON public.album_asset USING btree ("assetId"); + + +-- +-- Name: album_asset_audit_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_asset_audit_albumId_idx" ON public.album_asset_audit USING btree ("albumId"); + + +-- +-- Name: album_asset_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_asset_audit_assetId_idx" ON public.album_asset_audit USING btree ("assetId"); + + +-- +-- Name: album_asset_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_asset_audit_deletedAt_idx" ON public.album_asset_audit USING btree ("deletedAt"); + + +-- +-- Name: album_asset_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_asset_updateId_idx" ON public.album_asset USING btree ("updateId"); + + +-- +-- Name: album_audit_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_audit_albumId_idx" ON public.album_audit USING btree ("albumId"); + + +-- +-- Name: album_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_audit_deletedAt_idx" ON public.album_audit USING btree ("deletedAt"); + + +-- +-- Name: album_audit_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_audit_userId_idx" ON public.album_audit USING btree ("userId"); + + +-- +-- Name: album_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_updateId_idx" ON public.album USING btree ("updateId"); + + +-- +-- Name: album_user_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_albumId_idx" ON public.album_user USING btree ("albumId"); + + +-- +-- Name: album_user_audit_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_audit_albumId_idx" ON public.album_user_audit USING btree ("albumId"); + + +-- +-- Name: album_user_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_audit_deletedAt_idx" ON public.album_user_audit USING btree ("deletedAt"); + + +-- +-- Name: album_user_audit_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_audit_userId_idx" ON public.album_user_audit USING btree ("userId"); + + +-- +-- Name: album_user_createId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_createId_idx" ON public.album_user USING btree ("createId"); + + +-- +-- Name: album_user_unique_owner; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE UNIQUE INDEX album_user_unique_owner ON public.album_user USING btree ("albumId") WHERE (role = 'owner'::public.album_user_role_enum); + + +-- +-- Name: album_user_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_updateId_idx" ON public.album_user USING btree ("updateId"); + + +-- +-- Name: album_user_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "album_user_userId_idx" ON public.album_user USING btree ("userId"); + + +-- +-- Name: api_key_key_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX api_key_key_idx ON public.api_key USING btree (key); + + +-- +-- Name: api_key_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "api_key_updateId_idx" ON public.api_key USING btree ("updateId"); + + +-- +-- Name: api_key_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "api_key_userId_idx" ON public.api_key USING btree ("userId"); + + +-- +-- Name: asset_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_audit_assetId_idx" ON public.asset_audit USING btree ("assetId"); + + +-- +-- Name: asset_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_audit_deletedAt_idx" ON public.asset_audit USING btree ("deletedAt"); + + +-- +-- Name: asset_audit_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_audit_ownerId_idx" ON public.asset_audit USING btree ("ownerId"); + + +-- +-- Name: asset_checksum_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX asset_checksum_idx ON public.asset USING btree (checksum); + + +-- +-- Name: asset_createdAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_createdAt_idx" ON public.asset USING btree ("createdAt"); + + +-- +-- Name: asset_duplicateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_duplicateId_idx" ON public.asset USING btree ("duplicateId"); + + +-- +-- Name: asset_edit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_edit_assetId_idx" ON public.asset_edit USING btree ("assetId"); + + +-- +-- Name: asset_edit_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_edit_audit_assetId_idx" ON public.asset_edit_audit USING btree ("assetId"); + + +-- +-- Name: asset_edit_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_edit_audit_deletedAt_idx" ON public.asset_edit_audit USING btree ("deletedAt"); + + +-- +-- Name: asset_edit_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_edit_updateId_idx" ON public.asset_edit USING btree ("updateId"); + + +-- +-- Name: asset_exif_autoStackId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_exif_autoStackId_idx" ON public.asset_exif USING btree ("autoStackId"); + + +-- +-- Name: asset_exif_city_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX asset_exif_city_idx ON public.asset_exif USING btree (city); + + +-- +-- Name: asset_exif_livePhotoCID_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_exif_livePhotoCID_idx" ON public.asset_exif USING btree ("livePhotoCID"); + + +-- +-- Name: asset_exif_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_exif_updateId_idx" ON public.asset_exif USING btree ("updateId"); + + +-- +-- Name: asset_face_assetId_personGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_face_assetId_personGroupId_idx" ON public.asset_face USING btree ("assetId", "personGroupId"); + + +-- +-- Name: asset_face_audit_assetFaceId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_face_audit_assetFaceId_idx" ON public.asset_face_audit USING btree ("assetFaceId"); + + +-- +-- Name: asset_face_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_face_audit_assetId_idx" ON public.asset_face_audit USING btree ("assetId"); + + +-- +-- Name: asset_face_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_face_audit_deletedAt_idx" ON public.asset_face_audit USING btree ("deletedAt"); + + +-- +-- Name: asset_face_personGroupId_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_face_personGroupId_assetId_idx" ON public.asset_face USING btree ("personGroupId", "assetId"); + + +-- +-- Name: asset_face_personGroupId_assetId_notDeleted_isVisible_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_face_personGroupId_assetId_notDeleted_isVisible_idx" ON public.asset_face USING btree ("personGroupId", "assetId") WHERE (("deletedAt" IS NULL) AND ("isVisible" IS TRUE)); + + +-- +-- Name: asset_fileCreatedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_fileCreatedAt_idx" ON public.asset USING btree ("fileCreatedAt"); + + +-- +-- Name: asset_file_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_file_assetId_idx" ON public.asset_file USING btree ("assetId"); + + +-- +-- Name: asset_file_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_file_updateId_idx" ON public.asset_file USING btree ("updateId"); + + +-- +-- Name: asset_id_stackId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_id_stackId_idx" ON public.asset USING btree (id, "stackId"); + + +-- +-- Name: asset_id_timeline_notDeleted_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_id_timeline_notDeleted_idx" ON public.asset USING btree (id) WHERE ((visibility = 'timeline'::public.asset_visibility_enum) AND ("deletedAt" IS NULL)); + + +-- +-- Name: asset_libraryId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_libraryId_idx" ON public.asset USING btree ("libraryId"); + + +-- +-- Name: asset_livePhotoVideoId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_livePhotoVideoId_idx" ON public.asset USING btree ("livePhotoVideoId"); + + +-- +-- Name: asset_localDateTime_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_localDateTime_idx" ON public.asset USING btree (((("localDateTime" AT TIME ZONE 'UTC'::text))::date)); + + +-- +-- Name: asset_localDateTime_month_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_localDateTime_month_idx" ON public.asset USING btree ((date_trunc('MONTH'::text, ("localDateTime" AT TIME ZONE 'UTC'::text)) AT TIME ZONE 'UTC'::text)); + + +-- +-- Name: asset_metadata_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_metadata_audit_assetId_idx" ON public.asset_metadata_audit USING btree ("assetId"); + + +-- +-- Name: asset_metadata_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_metadata_audit_deletedAt_idx" ON public.asset_metadata_audit USING btree ("deletedAt"); + + +-- +-- Name: asset_metadata_audit_key_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX asset_metadata_audit_key_idx ON public.asset_metadata_audit USING btree (key); + + +-- +-- Name: asset_metadata_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_metadata_updateId_idx" ON public.asset_metadata USING btree ("updateId"); + + +-- +-- Name: asset_metadata_updatedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_metadata_updatedAt_idx" ON public.asset_metadata USING btree ("updatedAt"); + + +-- +-- Name: asset_ocr_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_ocr_assetId_idx" ON public.asset_ocr USING btree ("assetId"); + + +-- +-- Name: asset_ocr_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_ocr_audit_assetId_idx" ON public.asset_ocr_audit USING btree ("assetId"); + + +-- +-- Name: asset_ocr_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_ocr_audit_deletedAt_idx" ON public.asset_ocr_audit USING btree ("deletedAt"); + + +-- +-- Name: asset_ocr_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_ocr_updateId_idx" ON public.asset_ocr USING btree ("updateId"); + + +-- +-- Name: asset_originalFileName_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_originalFileName_idx" ON public.asset USING btree ("originalFileName"); + + +-- +-- Name: asset_originalFilename_trigram_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_originalFilename_trigram_idx" ON public.asset USING gin (public.f_unaccent(("originalFileName")::text) public.gin_trgm_ops); + + +-- +-- Name: asset_originalPath_libraryId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_originalPath_libraryId_idx" ON public.asset USING btree ("originalPath", "libraryId"); + + +-- +-- Name: asset_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_ownerId_idx" ON public.asset USING btree ("ownerId"); + + +-- +-- Name: asset_ownerId_libraryId_checksum_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE UNIQUE INDEX "asset_ownerId_libraryId_checksum_idx" ON public.asset USING btree ("ownerId", "libraryId", checksum) WHERE ("libraryId" IS NOT NULL); + + +-- +-- Name: asset_stackId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_stackId_idx" ON public.asset USING btree ("stackId"); + + +-- +-- Name: asset_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "asset_updateId_idx" ON public.asset USING btree ("updateId"); + + +-- +-- Name: clip_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX clip_index ON public.smart_search USING vchordrq (embedding public.vector_cosine_ops) WITH (options=' + residual_quantization = false + [build.internal] + lists = [1] + spherical_centroids = true + build_threads = 4 + sampling_factor = 1024 + '); + + +-- +-- Name: cluster_group_request_clusterGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "cluster_group_request_clusterGroupId_idx" ON public.cluster_group_request USING btree ("clusterGroupId"); + + +-- +-- Name: cluster_group_request_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "cluster_group_request_userId_idx" ON public.cluster_group_request USING btree ("userId"); + + +-- +-- Name: cluster_group_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "cluster_group_updateId_idx" ON public.cluster_group USING btree ("updateId"); + + +-- +-- Name: face_index; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX face_index ON public.face_search USING vchordrq (embedding public.vector_cosine_ops) WITH (options=' + residual_quantization = false + [build.internal] + lists = [1] + spherical_centroids = true + build_threads = 4 + sampling_factor = 1024 + '); + + +-- +-- Name: idx_geodata_places_admin1_name; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX idx_geodata_places_admin1_name ON public.geodata_places USING gin (public.f_unaccent(("admin1Name")::text) public.gin_trgm_ops); + + +-- +-- Name: idx_geodata_places_admin2_name; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX idx_geodata_places_admin2_name ON public.geodata_places USING gin (public.f_unaccent(("admin2Name")::text) public.gin_trgm_ops); + + +-- +-- Name: idx_geodata_places_alternate_names; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX idx_geodata_places_alternate_names ON public.geodata_places USING gin (public.f_unaccent(("alternateNames")::text) public.gin_trgm_ops); + + +-- +-- Name: idx_geodata_places_name; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX idx_geodata_places_name ON public.geodata_places USING gin (public.f_unaccent((name)::text) public.gin_trgm_ops); + + +-- +-- Name: idx_ocr_search_text; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX idx_ocr_search_text ON public.ocr_search USING gin (public.f_unaccent(text) public.gin_trgm_ops); + + +-- +-- Name: idx_person_name_trigram; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX idx_person_name_trigram ON public.person USING gin (public.f_unaccent((name)::text) public.gin_trgm_ops); + + +-- +-- Name: integrity_report_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "integrity_report_assetId_idx" ON public.integrity_report USING btree ("assetId"); + + +-- +-- Name: integrity_report_fileAssetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "integrity_report_fileAssetId_idx" ON public.integrity_report USING btree ("fileAssetId"); + + +-- +-- Name: library_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "library_ownerId_idx" ON public.library USING btree ("ownerId"); + + +-- +-- Name: library_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "library_updateId_idx" ON public.library USING btree ("updateId"); + + +-- +-- Name: memory_asset_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_asset_assetId_idx" ON public.memory_asset USING btree ("assetId"); + + +-- +-- Name: memory_asset_audit_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_asset_audit_assetId_idx" ON public.memory_asset_audit USING btree ("assetId"); + + +-- +-- Name: memory_asset_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_asset_audit_deletedAt_idx" ON public.memory_asset_audit USING btree ("deletedAt"); + + +-- +-- Name: memory_asset_audit_memoryId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_asset_audit_memoryId_idx" ON public.memory_asset_audit USING btree ("memoryId"); + + +-- +-- Name: memory_asset_memoriesId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_asset_memoriesId_idx" ON public.memory_asset USING btree ("memoriesId"); + + +-- +-- Name: memory_asset_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_asset_updateId_idx" ON public.memory_asset USING btree ("updateId"); + + +-- +-- Name: memory_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_audit_deletedAt_idx" ON public.memory_audit USING btree ("deletedAt"); + + +-- +-- Name: memory_audit_memoryId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_audit_memoryId_idx" ON public.memory_audit USING btree ("memoryId"); + + +-- +-- Name: memory_audit_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_audit_userId_idx" ON public.memory_audit USING btree ("userId"); + + +-- +-- Name: memory_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_ownerId_idx" ON public.memory USING btree ("ownerId"); + + +-- +-- Name: memory_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "memory_updateId_idx" ON public.memory USING btree ("updateId"); + + +-- +-- Name: notification_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "notification_updateId_idx" ON public.notification USING btree ("updateId"); + + +-- +-- Name: notification_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "notification_userId_idx" ON public.notification USING btree ("userId"); + + +-- +-- Name: partner_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "partner_audit_deletedAt_idx" ON public.partner_audit USING btree ("deletedAt"); + + +-- +-- Name: partner_audit_sharedById_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "partner_audit_sharedById_idx" ON public.partner_audit USING btree ("sharedById"); + + +-- +-- Name: partner_audit_sharedWithId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "partner_audit_sharedWithId_idx" ON public.partner_audit USING btree ("sharedWithId"); + + +-- +-- Name: partner_createId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "partner_createId_idx" ON public.partner USING btree ("createId"); + + +-- +-- Name: partner_sharedWithId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "partner_sharedWithId_idx" ON public.partner USING btree ("sharedWithId"); + + +-- +-- Name: partner_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "partner_updateId_idx" ON public.partner USING btree ("updateId"); + + +-- +-- Name: person_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_audit_deletedAt_idx" ON public.person_audit USING btree ("deletedAt"); + + +-- +-- Name: person_audit_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_audit_ownerId_idx" ON public.person_audit USING btree ("ownerId"); + + +-- +-- Name: person_audit_personGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_audit_personGroupId_idx" ON public.person_audit USING btree ("personGroupId"); + + +-- +-- Name: person_faceAssetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_faceAssetId_idx" ON public.person USING btree ("faceAssetId"); + + +-- +-- Name: person_group_audit_clusterGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_group_audit_clusterGroupId_idx" ON public.person_group_audit USING btree ("clusterGroupId"); + + +-- +-- Name: person_group_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_group_audit_deletedAt_idx" ON public.person_group_audit USING btree ("deletedAt"); + + +-- +-- Name: person_group_audit_personGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_group_audit_personGroupId_idx" ON public.person_group_audit USING btree ("personGroupId"); + + +-- +-- Name: person_group_clusterGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_group_clusterGroupId_idx" ON public.person_group USING btree ("clusterGroupId"); + + +-- +-- Name: person_group_createId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_group_createId_idx" ON public.person_group USING btree ("createId"); + + +-- +-- Name: person_group_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_group_updateId_idx" ON public.person_group USING btree ("updateId"); + + +-- +-- Name: person_personGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_personGroupId_idx" ON public.person USING btree ("personGroupId"); + + +-- +-- Name: person_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "person_updateId_idx" ON public.person USING btree ("updateId"); + + +-- +-- Name: plugin_method_pluginId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "plugin_method_pluginId_idx" ON public.plugin_method USING btree ("pluginId"); + + +-- +-- Name: plugin_name_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX plugin_name_idx ON public.plugin USING btree (name); + + +-- +-- Name: session_oauthSid_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "session_oauthSid_idx" ON public.session USING btree ("oauthSid"); + + +-- +-- Name: session_parentId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "session_parentId_idx" ON public.session USING btree ("parentId"); + + +-- +-- Name: session_sync_checkpoint_sessionId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "session_sync_checkpoint_sessionId_idx" ON public.session_sync_checkpoint USING btree ("sessionId"); + + +-- +-- Name: session_sync_checkpoint_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "session_sync_checkpoint_updateId_idx" ON public.session_sync_checkpoint USING btree ("updateId"); + + +-- +-- Name: session_token_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX session_token_idx ON public.session USING btree (token); + + +-- +-- Name: session_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "session_updateId_idx" ON public.session USING btree ("updateId"); + + +-- +-- Name: session_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "session_userId_idx" ON public.session USING btree ("userId"); + + +-- +-- Name: shared_link_albumId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "shared_link_albumId_idx" ON public.shared_link USING btree ("albumId"); + + +-- +-- Name: shared_link_asset_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "shared_link_asset_assetId_idx" ON public.shared_link_asset USING btree ("assetId"); + + +-- +-- Name: shared_link_asset_sharedLinkId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "shared_link_asset_sharedLinkId_idx" ON public.shared_link_asset USING btree ("sharedLinkId"); + + +-- +-- Name: shared_link_key_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX shared_link_key_idx ON public.shared_link USING btree (key); + + +-- +-- Name: shared_link_userId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "shared_link_userId_idx" ON public.shared_link USING btree ("userId"); + + +-- +-- Name: stack_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "stack_audit_deletedAt_idx" ON public.stack_audit USING btree ("deletedAt"); + + +-- +-- Name: stack_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "stack_ownerId_idx" ON public.stack USING btree ("ownerId"); + + +-- +-- Name: stack_primaryAssetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "stack_primaryAssetId_idx" ON public.stack USING btree ("primaryAssetId"); + + +-- +-- Name: tag_asset_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "tag_asset_assetId_idx" ON public.tag_asset USING btree ("assetId"); + + +-- +-- Name: tag_asset_assetId_tagId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "tag_asset_assetId_tagId_idx" ON public.tag_asset USING btree ("assetId", "tagId"); + + +-- +-- Name: tag_asset_tagId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "tag_asset_tagId_idx" ON public.tag_asset USING btree ("tagId"); + + +-- +-- Name: tag_closure_id_ancestor_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX tag_closure_id_ancestor_idx ON public.tag_closure USING btree (id_ancestor); + + +-- +-- Name: tag_closure_id_descendant_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX tag_closure_id_descendant_idx ON public.tag_closure USING btree (id_descendant); + + +-- +-- Name: tag_parentId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "tag_parentId_idx" ON public.tag USING btree ("parentId"); + + +-- +-- Name: tag_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "tag_updateId_idx" ON public.tag USING btree ("updateId"); + + +-- +-- Name: user_audit_deletedAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "user_audit_deletedAt_idx" ON public.user_audit USING btree ("deletedAt"); + + +-- +-- Name: user_clusterGroupId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "user_clusterGroupId_idx" ON public."user" USING btree ("clusterGroupId"); + + +-- +-- Name: user_updateId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "user_updateId_idx" ON public."user" USING btree ("updateId"); + + +-- +-- Name: user_updatedAt_id_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "user_updatedAt_id_idx" ON public."user" USING btree ("updatedAt", id); + + +-- +-- Name: video_stream_session_assetId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "video_stream_session_assetId_idx" ON public.video_stream_session USING btree ("assetId"); + + +-- +-- Name: video_stream_session_expiresAt_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "video_stream_session_expiresAt_idx" ON public.video_stream_session USING btree ("expiresAt"); + + +-- +-- Name: video_stream_variant_sessionId_bitrate_resolution_codec_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE UNIQUE INDEX "video_stream_variant_sessionId_bitrate_resolution_codec_idx" ON public.video_stream_variant USING btree ("sessionId", bitrate, resolution, codec); + + +-- +-- Name: workflow_log_workflowId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "workflow_log_workflowId_idx" ON public.workflow_log USING btree ("workflowId"); + + +-- +-- Name: workflow_log_workflowStepId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "workflow_log_workflowStepId_idx" ON public.workflow_log USING btree ("workflowStepId"); + + +-- +-- Name: workflow_ownerId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "workflow_ownerId_idx" ON public.workflow USING btree ("ownerId"); + + +-- +-- Name: workflow_step_pluginMethodId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "workflow_step_pluginMethodId_idx" ON public.workflow_step USING btree ("pluginMethodId"); + + +-- +-- Name: workflow_step_workflowId_idx; Type: INDEX; Schema: public; Owner: postgres +-- + +CREATE INDEX "workflow_step_workflowId_idx" ON public.workflow_step USING btree ("workflowId"); + + +-- +-- Name: activity activity_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "activity_updatedAt" BEFORE UPDATE ON public.activity FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: album_asset album_asset_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER album_asset_delete_audit AFTER DELETE ON public.album_asset REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() <= 1)) EXECUTE FUNCTION public.album_asset_delete_audit(); + + +-- +-- Name: album_asset album_asset_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "album_asset_updatedAt" BEFORE UPDATE ON public.album_asset FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: album album_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "album_updatedAt" BEFORE UPDATE ON public.album FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: album_user album_user_after_insert; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER album_user_after_insert AFTER INSERT ON public.album_user REFERENCING NEW TABLE AS inserted_rows FOR EACH STATEMENT EXECUTE FUNCTION public.album_user_after_insert(); + + +-- +-- Name: album_user album_user_delete; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER album_user_delete AFTER DELETE ON public.album_user REFERENCING OLD TABLE AS old FOR EACH ROW EXECUTE FUNCTION public.album_user_delete(); + + +-- +-- Name: album_user album_user_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER album_user_delete_audit AFTER DELETE ON public.album_user REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() <= 1)) EXECUTE FUNCTION public.album_user_delete_audit(); + + +-- +-- Name: album_user album_user_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "album_user_updatedAt" BEFORE UPDATE ON public.album_user FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: api_key api_key_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "api_key_updatedAt" BEFORE UPDATE ON public.api_key FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset asset_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_delete_audit AFTER DELETE ON public.asset REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.asset_delete_audit(); + + +-- +-- Name: asset_edit asset_edit_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_edit_audit AFTER DELETE ON public.asset_edit REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.asset_edit_audit(); + + +-- +-- Name: asset_edit asset_edit_delete; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_edit_delete AFTER DELETE ON public.asset_edit REFERENCING OLD TABLE AS deleted_edit FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.asset_edit_delete(); + + +-- +-- Name: asset_edit asset_edit_insert; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_edit_insert AFTER INSERT ON public.asset_edit REFERENCING NEW TABLE AS inserted_edit FOR EACH STATEMENT EXECUTE FUNCTION public.asset_edit_insert(); + + +-- +-- Name: asset_edit asset_edit_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "asset_edit_updatedAt" BEFORE UPDATE ON public.asset_edit FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset_exif asset_exif_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "asset_exif_updatedAt" BEFORE UPDATE ON public.asset_exif FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset_face asset_face_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_face_audit AFTER DELETE ON public.asset_face REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.asset_face_audit(); + + +-- +-- Name: asset_face asset_face_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "asset_face_updatedAt" BEFORE UPDATE ON public.asset_face FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset_file asset_file_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "asset_file_updatedAt" BEFORE UPDATE ON public.asset_file FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset_metadata asset_metadata_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_metadata_audit AFTER DELETE ON public.asset_metadata REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.asset_metadata_audit(); + + +-- +-- Name: asset_metadata asset_metadata_updated_at; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_metadata_updated_at BEFORE UPDATE ON public.asset_metadata FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset_ocr asset_ocr_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER asset_ocr_delete_audit AFTER DELETE ON public.asset_ocr REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.asset_ocr_delete_audit(); + + +-- +-- Name: asset_ocr asset_ocr_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "asset_ocr_updatedAt" BEFORE UPDATE ON public.asset_ocr FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: asset asset_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "asset_updatedAt" BEFORE UPDATE ON public.asset FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: cluster_group cluster_group_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "cluster_group_updatedAt" BEFORE UPDATE ON public.cluster_group FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: library library_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "library_updatedAt" BEFORE UPDATE ON public.library FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: memory_asset memory_asset_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER memory_asset_delete_audit AFTER DELETE ON public.memory_asset REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() <= 1)) EXECUTE FUNCTION public.memory_asset_delete_audit(); + + +-- +-- Name: memory_asset memory_asset_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "memory_asset_updatedAt" BEFORE UPDATE ON public.memory_asset FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: memory memory_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER memory_delete_audit AFTER DELETE ON public.memory REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.memory_delete_audit(); + + +-- +-- Name: memory memory_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "memory_updatedAt" BEFORE UPDATE ON public.memory FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: notification notification_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "notification_updatedAt" BEFORE UPDATE ON public.notification FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: partner partner_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER partner_delete_audit AFTER DELETE ON public.partner REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.partner_delete_audit(); + + +-- +-- Name: partner partner_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "partner_updatedAt" BEFORE UPDATE ON public.partner FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: person person_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER person_delete_audit AFTER DELETE ON public.person REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() <= 1)) EXECUTE FUNCTION public.person_delete_audit(); + + +-- +-- Name: person_group person_group_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER person_group_delete_audit AFTER DELETE ON public.person_group REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.person_group_delete_audit(); + + +-- +-- Name: person_group person_group_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "person_group_updatedAt" BEFORE UPDATE ON public.person_group FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: person person_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "person_updatedAt" BEFORE UPDATE ON public.person FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: session_sync_checkpoint session_sync_checkpoint_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "session_sync_checkpoint_updatedAt" BEFORE UPDATE ON public.session_sync_checkpoint FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: session session_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "session_updatedAt" BEFORE UPDATE ON public.session FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: stack stack_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER stack_delete_audit AFTER DELETE ON public.stack REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.stack_delete_audit(); + + +-- +-- Name: stack stack_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "stack_updatedAt" BEFORE UPDATE ON public.stack FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: tag tag_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "tag_updatedAt" BEFORE UPDATE ON public.tag FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: user user_delete_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER user_delete_audit AFTER DELETE ON public."user" REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.user_delete_audit(); + + +-- +-- Name: user_metadata user_metadata_audit; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER user_metadata_audit AFTER DELETE ON public.user_metadata REFERENCING OLD TABLE AS old FOR EACH STATEMENT WHEN ((pg_trigger_depth() = 0)) EXECUTE FUNCTION public.user_metadata_audit(); + + +-- +-- Name: user_metadata user_metadata_updated_at; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER user_metadata_updated_at BEFORE UPDATE ON public.user_metadata FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: user user_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "user_updatedAt" BEFORE UPDATE ON public."user" FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: workflow workflow_updatedAt; Type: TRIGGER; Schema: public; Owner: postgres +-- + +CREATE TRIGGER "workflow_updatedAt" BEFORE UPDATE ON public.workflow FOR EACH ROW EXECUTE FUNCTION public.updated_at(); + + +-- +-- Name: activity activity_albumId_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.activity + ADD CONSTRAINT "activity_albumId_assetId_fkey" FOREIGN KEY ("albumId", "assetId") REFERENCES public.album_asset("albumId", "assetId") ON DELETE CASCADE; + + +-- +-- Name: activity activity_albumId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.activity + ADD CONSTRAINT "activity_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES public.album(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: activity activity_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.activity + ADD CONSTRAINT "activity_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: activity activity_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.activity + ADD CONSTRAINT "activity_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: album album_albumThumbnailAssetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album + ADD CONSTRAINT "album_albumThumbnailAssetId_fkey" FOREIGN KEY ("albumThumbnailAssetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE SET NULL; + + +-- +-- Name: album_asset album_asset_albumId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_asset + ADD CONSTRAINT "album_asset_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES public.album(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: album_asset album_asset_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_asset + ADD CONSTRAINT "album_asset_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: album_asset_audit album_asset_audit_albumId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_asset_audit + ADD CONSTRAINT "album_asset_audit_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES public.album(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: album_user album_user_albumId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_user + ADD CONSTRAINT "album_user_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES public.album(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: album_user album_user_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.album_user + ADD CONSTRAINT "album_user_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: api_key api_key_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.api_key + ADD CONSTRAINT "api_key_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset_audio asset_audio_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_audio + ADD CONSTRAINT "asset_audio_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON DELETE CASCADE; + + +-- +-- Name: asset_edit asset_edit_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_edit + ADD CONSTRAINT "asset_edit_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset_exif asset_exif_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_exif + ADD CONSTRAINT "asset_exif_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON DELETE CASCADE; + + +-- +-- Name: asset_face asset_face_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_face + ADD CONSTRAINT "asset_face_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset_face asset_face_personGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_face + ADD CONSTRAINT "asset_face_personGroupId_fkey" FOREIGN KEY ("personGroupId") REFERENCES public.person_group(id) ON UPDATE CASCADE ON DELETE SET NULL; + + +-- +-- Name: asset_file asset_file_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_file + ADD CONSTRAINT "asset_file_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset_job_status asset_job_status_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_job_status + ADD CONSTRAINT "asset_job_status_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset_keyframe asset_keyframe_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_keyframe + ADD CONSTRAINT "asset_keyframe_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON DELETE CASCADE; + + +-- +-- Name: asset asset_libraryId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset + ADD CONSTRAINT "asset_libraryId_fkey" FOREIGN KEY ("libraryId") REFERENCES public.library(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset asset_livePhotoVideoId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset + ADD CONSTRAINT "asset_livePhotoVideoId_fkey" FOREIGN KEY ("livePhotoVideoId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE SET NULL; + + +-- +-- Name: asset_metadata asset_metadata_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_metadata + ADD CONSTRAINT "asset_metadata_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset_ocr asset_ocr_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_ocr + ADD CONSTRAINT "asset_ocr_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset asset_ownerId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset + ADD CONSTRAINT "asset_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: asset asset_stackId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset + ADD CONSTRAINT "asset_stackId_fkey" FOREIGN KEY ("stackId") REFERENCES public.stack(id) ON UPDATE CASCADE ON DELETE SET NULL; + + +-- +-- Name: asset_video asset_video_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.asset_video + ADD CONSTRAINT "asset_video_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON DELETE CASCADE; + + +-- +-- Name: cluster_group_request cluster_group_request_clusterGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.cluster_group_request + ADD CONSTRAINT "cluster_group_request_clusterGroupId_fkey" FOREIGN KEY ("clusterGroupId") REFERENCES public.cluster_group(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: cluster_group_request cluster_group_request_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.cluster_group_request + ADD CONSTRAINT "cluster_group_request_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: face_search face_search_faceId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.face_search + ADD CONSTRAINT "face_search_faceId_fkey" FOREIGN KEY ("faceId") REFERENCES public.asset_face(id) ON DELETE CASCADE; + + +-- +-- Name: integrity_report integrity_report_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.integrity_report + ADD CONSTRAINT "integrity_report_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: integrity_report integrity_report_fileAssetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.integrity_report + ADD CONSTRAINT "integrity_report_fileAssetId_fkey" FOREIGN KEY ("fileAssetId") REFERENCES public.asset_file(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: library library_ownerId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.library + ADD CONSTRAINT "library_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: memory_asset memory_asset_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory_asset + ADD CONSTRAINT "memory_asset_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: memory_asset_audit memory_asset_audit_memoryId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory_asset_audit + ADD CONSTRAINT "memory_asset_audit_memoryId_fkey" FOREIGN KEY ("memoryId") REFERENCES public.memory(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: memory_asset memory_asset_memoriesId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory_asset + ADD CONSTRAINT "memory_asset_memoriesId_fkey" FOREIGN KEY ("memoriesId") REFERENCES public.memory(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: memory memory_ownerId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.memory + ADD CONSTRAINT "memory_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: notification notification_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.notification + ADD CONSTRAINT "notification_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: ocr_search ocr_search_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.ocr_search + ADD CONSTRAINT "ocr_search_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: partner partner_sharedById_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.partner + ADD CONSTRAINT "partner_sharedById_fkey" FOREIGN KEY ("sharedById") REFERENCES public."user"(id) ON DELETE CASCADE; + + +-- +-- Name: partner partner_sharedWithId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.partner + ADD CONSTRAINT "partner_sharedWithId_fkey" FOREIGN KEY ("sharedWithId") REFERENCES public."user"(id) ON DELETE CASCADE; + + +-- +-- Name: person person_faceAssetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person + ADD CONSTRAINT "person_faceAssetId_fkey" FOREIGN KEY ("faceAssetId") REFERENCES public.asset_face(id) ON DELETE SET NULL; + + +-- +-- Name: person_group person_group_clusterGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person_group + ADD CONSTRAINT "person_group_clusterGroupId_fkey" FOREIGN KEY ("clusterGroupId") REFERENCES public.cluster_group(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: person person_ownerId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person + ADD CONSTRAINT "person_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: person person_personGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.person + ADD CONSTRAINT "person_personGroupId_fkey" FOREIGN KEY ("personGroupId") REFERENCES public.person_group(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: plugin_method plugin_method_pluginId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.plugin_method + ADD CONSTRAINT "plugin_method_pluginId_fkey" FOREIGN KEY ("pluginId") REFERENCES public.plugin(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: session session_parentId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.session + ADD CONSTRAINT "session_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES public.session(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: session_sync_checkpoint session_sync_checkpoint_sessionId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.session_sync_checkpoint + ADD CONSTRAINT "session_sync_checkpoint_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES public.session(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: session session_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.session + ADD CONSTRAINT "session_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: shared_link shared_link_albumId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link + ADD CONSTRAINT "shared_link_albumId_fkey" FOREIGN KEY ("albumId") REFERENCES public.album(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: shared_link_asset shared_link_asset_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link_asset + ADD CONSTRAINT "shared_link_asset_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: shared_link_asset shared_link_asset_sharedLinkId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link_asset + ADD CONSTRAINT "shared_link_asset_sharedLinkId_fkey" FOREIGN KEY ("sharedLinkId") REFERENCES public.shared_link(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: shared_link shared_link_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.shared_link + ADD CONSTRAINT "shared_link_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: smart_search smart_search_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.smart_search + ADD CONSTRAINT "smart_search_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON DELETE CASCADE; + + +-- +-- Name: stack stack_ownerId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.stack + ADD CONSTRAINT "stack_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: stack stack_primaryAssetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.stack + ADD CONSTRAINT "stack_primaryAssetId_fkey" FOREIGN KEY ("primaryAssetId") REFERENCES public.asset(id); + + +-- +-- Name: tag_asset tag_asset_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag_asset + ADD CONSTRAINT "tag_asset_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: tag_asset tag_asset_tagId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag_asset + ADD CONSTRAINT "tag_asset_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES public.tag(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: tag_closure tag_closure_id_ancestor_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag_closure + ADD CONSTRAINT tag_closure_id_ancestor_fkey FOREIGN KEY (id_ancestor) REFERENCES public.tag(id) ON DELETE CASCADE; + + +-- +-- Name: tag_closure tag_closure_id_descendant_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag_closure + ADD CONSTRAINT tag_closure_id_descendant_fkey FOREIGN KEY (id_descendant) REFERENCES public.tag(id) ON DELETE CASCADE; + + +-- +-- Name: tag tag_parentId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT "tag_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES public.tag(id) ON DELETE CASCADE; + + +-- +-- Name: tag tag_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.tag + ADD CONSTRAINT "tag_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: user user_clusterGroupId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public."user" + ADD CONSTRAINT "user_clusterGroupId_fkey" FOREIGN KEY ("clusterGroupId") REFERENCES public.cluster_group(id) ON UPDATE CASCADE; + + +-- +-- Name: user_metadata user_metadata_userId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.user_metadata + ADD CONSTRAINT "user_metadata_userId_fkey" FOREIGN KEY ("userId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: video_stream_segment video_stream_segment_variantId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.video_stream_segment + ADD CONSTRAINT "video_stream_segment_variantId_fkey" FOREIGN KEY ("variantId") REFERENCES public.video_stream_variant(id) ON DELETE CASCADE; + + +-- +-- Name: video_stream_session video_stream_session_assetId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.video_stream_session + ADD CONSTRAINT "video_stream_session_assetId_fkey" FOREIGN KEY ("assetId") REFERENCES public.asset(id) ON DELETE CASCADE; + + +-- +-- Name: video_stream_variant video_stream_variant_sessionId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.video_stream_variant + ADD CONSTRAINT "video_stream_variant_sessionId_fkey" FOREIGN KEY ("sessionId") REFERENCES public.video_stream_session(id) ON DELETE CASCADE; + + +-- +-- Name: workflow_log workflow_log_workflowId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow_log + ADD CONSTRAINT "workflow_log_workflowId_fkey" FOREIGN KEY ("workflowId") REFERENCES public.workflow(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: workflow_log workflow_log_workflowStepId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow_log + ADD CONSTRAINT "workflow_log_workflowStepId_fkey" FOREIGN KEY ("workflowStepId") REFERENCES public.workflow_step(id) ON UPDATE CASCADE ON DELETE SET NULL; + + +-- +-- Name: workflow workflow_ownerId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow + ADD CONSTRAINT "workflow_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES public."user"(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: workflow_step workflow_step_pluginMethodId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow_step + ADD CONSTRAINT "workflow_step_pluginMethodId_fkey" FOREIGN KEY ("pluginMethodId") REFERENCES public.plugin_method(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- Name: workflow_step workflow_step_workflowId_fkey; Type: FK CONSTRAINT; Schema: public; Owner: postgres +-- + +ALTER TABLE ONLY public.workflow_step + ADD CONSTRAINT "workflow_step_workflowId_fkey" FOREIGN KEY ("workflowId") REFERENCES public.workflow(id) ON UPDATE CASCADE ON DELETE CASCADE; + + +-- +-- PostgreSQL database dump complete +-- + +\unrestrict mjMyY2YEVBfWGabnjdRqEcQmimigWbvovifIDg4VxfkA30tCaxYDjnokejkP5XZ +