mirror of
https://github.com/nkanaev/yarr.git
synced 2026-06-24 09:05:16 +00:00
postgres migration tweaks
This commit is contained in:
@@ -12,6 +12,12 @@ var migrations = []func(*sql.Tx) error{
|
|||||||
var maxVersion = int64(len(migrations))
|
var maxVersion = int64(len(migrations))
|
||||||
|
|
||||||
func migrate(db *sql.DB) error {
|
func migrate(db *sql.DB) error {
|
||||||
|
if _, err := db.Exec(
|
||||||
|
`create table if not exists schema_version (version bigint primary key)`
|
||||||
|
); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
var version int64
|
var version int64
|
||||||
err := db.QueryRow(
|
err := db.QueryRow(
|
||||||
`select coalesce(max(version), 0) from schema_version`,
|
`select coalesce(max(version), 0) from schema_version`,
|
||||||
@@ -57,19 +63,15 @@ func migrate(db *sql.DB) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func m01_initial(tx *sql.Tx) error {
|
func m01_initial(tx *sql.Tx) error {
|
||||||
stmts := []string{
|
_, err := tx.Exec(`
|
||||||
`create table if not exists schema_version (
|
create table if not exists folders (
|
||||||
version bigint primary key
|
|
||||||
)`,
|
|
||||||
|
|
||||||
`create table if not exists folders (
|
|
||||||
id bigserial primary key,
|
id bigserial primary key,
|
||||||
title text not null,
|
title text not null,
|
||||||
is_expanded boolean not null default false
|
is_expanded boolean not null default false
|
||||||
)`,
|
);
|
||||||
`create unique index if not exists idx_folder_title on folders(title)`,
|
create unique index if not exists idx_folder_title on folders(title);
|
||||||
|
|
||||||
`create table if not exists feeds (
|
create table if not exists feeds (
|
||||||
id bigserial primary key,
|
id bigserial primary key,
|
||||||
folder_id bigint references folders(id) on delete set null,
|
folder_id bigint references folders(id) on delete set null,
|
||||||
title text not null,
|
title text not null,
|
||||||
@@ -77,11 +79,11 @@ func m01_initial(tx *sql.Tx) error {
|
|||||||
link text,
|
link text,
|
||||||
feed_link text not null,
|
feed_link text not null,
|
||||||
icon bytea
|
icon bytea
|
||||||
)`,
|
);
|
||||||
`create index if not exists idx_feed_folder_id on feeds(folder_id)`,
|
create index if not exists idx_feed_folder_id on feeds(folder_id);
|
||||||
`create unique index if not exists idx_feed_feed_link on feeds(feed_link)`,
|
create unique index if not exists idx_feed_feed_link on feeds(feed_link);
|
||||||
|
|
||||||
`create table if not exists items (
|
create table if not exists items (
|
||||||
id bigserial primary key,
|
id bigserial primary key,
|
||||||
guid text not null,
|
guid text not null,
|
||||||
feed_id bigint not null references feeds(id) on delete cascade,
|
feed_id bigint not null references feeds(id) on delete cascade,
|
||||||
@@ -93,15 +95,15 @@ func m01_initial(tx *sql.Tx) error {
|
|||||||
last_arrived timestamptz,
|
last_arrived timestamptz,
|
||||||
status integer,
|
status integer,
|
||||||
media_links jsonb
|
media_links jsonb
|
||||||
)`,
|
);
|
||||||
`create index if not exists idx_item_feed_id on items(feed_id)`,
|
create index if not exists idx_item_feed_id on items(feed_id);
|
||||||
`create index if not exists idx_item__date_id_status on items(date, id, status)`,
|
create index if not exists idx_item__date_id_status on items(date, id, status);
|
||||||
`create unique index if not exists idx_item_guid on items(feed_id, guid)`,
|
create unique index if not exists idx_item_guid on items(feed_id, guid);
|
||||||
|
|
||||||
`alter table items add column if not exists search tsvector`,
|
alter table items add column if not exists search tsvector;
|
||||||
`create index if not exists idx_item_search on items using gin(search)`,
|
create index if not exists idx_item_search on items using gin(search);
|
||||||
|
|
||||||
`create or replace function items_search_update() returns trigger as $$
|
create or replace function items_search_update() returns trigger as $$
|
||||||
begin
|
begin
|
||||||
new.search := to_tsvector('english',
|
new.search := to_tsvector('english',
|
||||||
coalesce(new.title, '') || ' ' ||
|
coalesce(new.title, '') || ' ' ||
|
||||||
@@ -109,34 +111,28 @@ func m01_initial(tx *sql.Tx) error {
|
|||||||
);
|
);
|
||||||
return new;
|
return new;
|
||||||
end;
|
end;
|
||||||
$$ language plpgsql`,
|
$$ language plpgsql;
|
||||||
|
|
||||||
`create trigger if not exists trg_items_search_insert
|
create trigger if not exists trg_items_search_insert
|
||||||
before insert on items
|
before insert on items
|
||||||
for each row execute function items_search_update()`,
|
for each row execute function items_search_update();
|
||||||
|
|
||||||
`create trigger if not exists trg_items_search_update
|
create trigger if not exists trg_items_search_update
|
||||||
before update of title, content on items
|
before update of title, content on items
|
||||||
for each row execute function items_search_update()`,
|
for each row execute function items_search_update();
|
||||||
|
|
||||||
`create table if not exists settings (
|
create table if not exists settings (
|
||||||
key text primary key,
|
key text primary key,
|
||||||
val jsonb
|
val jsonb
|
||||||
)`,
|
);
|
||||||
|
|
||||||
`create table if not exists feed_states (
|
create table if not exists feed_states (
|
||||||
feed_id bigint primary key references feeds(id) on delete cascade,
|
feed_id bigint primary key references feeds(id) on delete cascade,
|
||||||
last_refreshed timestamptz not null default '1970-01-01 00:00:00+00',
|
last_refreshed timestamptz not null default '1970-01-01 00:00:00+00',
|
||||||
last_error text not null default '',
|
last_error text not null default '',
|
||||||
http_lmod text not null default '',
|
http_lmod text not null default '',
|
||||||
http_etag text not null default ''
|
http_etag text not null default ''
|
||||||
)`,
|
);
|
||||||
}
|
`)
|
||||||
|
|
||||||
for _, stmt := range stmts {
|
|
||||||
if _, err := tx.Exec(stmt); err != nil {
|
|
||||||
return err
|
return err
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user