indradb-postgres 0.1.0

A postgres-backed datastore for IndraDB
Documentation
pub const SCHEMA: &'static str = "
/* Vertices */
CREATE TABLE vertices (
    id UUID NOT NULL,
    type VARCHAR(1000) NOT NULL
);

ALTER TABLE vertices
    ADD CONSTRAINT vertices_pkey PRIMARY KEY (id);

/* Edges */
CREATE TABLE edges (
    id UUID NOT NULL,
    outbound_id UUID NOT NULL,
    type VARCHAR(1000) NOT NULL,
    inbound_id UUID NOT NULL,
    update_timestamp TIMESTAMP WITH TIME ZONE NOT NULL
);

ALTER TABLE edges
    ADD CONSTRAINT edges_pkey PRIMARY KEY (id),
    ADD CONSTRAINT edges_outbound_id_type_inbound_id_ukey UNIQUE (outbound_id, type, inbound_id),
    ADD CONSTRAINT edges_outbound_id_fkey FOREIGN KEY (outbound_id) REFERENCES vertices (id) ON DELETE CASCADE,
    ADD CONSTRAINT edges_inbound_id_fkey FOREIGN KEY (inbound_id) REFERENCES vertices (id) ON DELETE CASCADE;

CREATE INDEX ix_edges_update_timestamp ON edges USING btree (update_timestamp);
CREATE INDEX ix_edges_inbound_id ON edges USING btree (inbound_id);

/* Vertex metadata */
CREATE TABLE vertex_metadata (
    owner_id UUID NOT NULL,
    name VARCHAR(1024) NOT NULL,
    value JSONB NOT NULL
);

ALTER TABLE vertex_metadata
    ADD CONSTRAINT vertex_metadata_pkey PRIMARY KEY (owner_id, name),
    ADD CONSTRAINT vertex_metadata_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES vertices (id) ON DELETE CASCADE;

/* Metadata */
CREATE TABLE edge_metadata (
    owner_id UUID NOT NULL,
    name VARCHAR(1024) NOT NULL,
    value JSONB NOT NULL
);

ALTER TABLE edge_metadata
    ADD CONSTRAINT edge_metadata_pkey PRIMARY KEY (owner_id, name),
    ADD CONSTRAINT edge_metadata_owner_id_fkey FOREIGN KEY (owner_id) REFERENCES edges (id) ON DELETE CASCADE;

";