39 lines
1.2 KiB
SQL
39 lines
1.2 KiB
SQL
BEGIN TRANSACTION;
|
|
|
|
DROP TYPE IF EXISTS dimension CASCADE;
|
|
DROP TABLE IF EXISTS attachments CASCADE;
|
|
|
|
CREATE TYPE dimension AS
|
|
( width int
|
|
, height int
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS attachments
|
|
( attachment_id bigserial primary key
|
|
, mimetype text NOT NULL
|
|
, creation_time timestamp with time zone NOT NULL
|
|
, sha256_hash text NOT NULL UNIQUE
|
|
, phash bigint
|
|
, illegal boolean NOT NULL DEFAULT false
|
|
, post_id bigint NOT NULL
|
|
, resolution dimension
|
|
, CHECK
|
|
(
|
|
(mimetype NOT IN ('image/jpeg', 'image/png', 'image/gif'))
|
|
OR
|
|
(phash IS NOT NULL)
|
|
)
|
|
, CONSTRAINT post_fk FOREIGN KEY (post_id) REFERENCES posts (post_id) ON DELETE CASCADE
|
|
);
|
|
CREATE INDEX attachments_creation_time_idx ON attachments (creation_time);
|
|
CREATE INDEX attachments_post_id_idx ON attachments (post_id);
|
|
CREATE INDEX attachments_sha256_hash_idx ON attachments (sha256_hash);
|
|
--
|
|
-- Index using the bktree extension for quickly getting the closest phashes
|
|
CREATE INDEX attachments_phash_bktree_index ON attachments USING spgist (phash bktree_ops);
|
|
|
|
GRANT SELECT ON attachments TO chan_archive_anon;
|
|
GRANT ALL ON attachments TO chan_archiver;
|
|
|
|
COMMIT;
|