Compare commits

...

6 Commits

Author SHA1 Message Date
broquemonsieur 41c8e6d17f
Merge 4eee5cf70f into b673695aa2 2024-04-16 15:28:13 +10:00
broquemonsieur 4eee5cf70f Run crystal format 2023-12-21 18:14:40 -08:00
broquemonsieur 559d3e32c4 Remove auto migrate line 2023-12-21 02:25:32 -08:00
broquemonsieur acf0c19fa9 Add backup creation 2023-12-21 02:23:38 -08:00
broquemonsieur 49f51543fd
Merge branch 'iv-org:master' into invidious_migrations 2023-12-21 10:13:13 +00:00
broquemonsieur 2d6748aae4 Add migrate script 2023-12-18 01:19:40 -08:00
2 changed files with 37 additions and 0 deletions

View File

@ -1,6 +1,8 @@
#!/bin/bash
set -eou pipefail
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" -c "CREATE SCHEMA IF NOT EXISTS backup"
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/channels.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/videos.sql
psql --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" < config/sql/channel_videos.sql

View File

@ -10,10 +10,17 @@ class Invidious::Database::Migrator
versions = load_versions
ran_migration = false
backed_up = false
load_migrations.sort_by(&.version)
.each do |migration|
next if versions.includes?(migration.version)
if !backed_up
puts "New migration(s) found: creating database backup"
back_up_database
backed_up = true
end
puts "Running migration: #{migration.class.name}"
migration.migrate
ran_migration = true
@ -46,4 +53,32 @@ class Invidious::Database::Migrator
)
SQL
end
private def back_up_database
table_names_request = <<-SQL
SELECT tablename FROM pg_catalog.pg_tables
WHERE schemaname = 'public'
SQL
table_names = @db.query_all(table_names_request, as: String)
table_names.try &.each do |name|
copy_table(name)
end
end
private def copy_table(table_name : String)
@db.exec <<-SQL
CREATE TABLE IF NOT EXISTS backup.#{table_name} (
id bigserial PRIMARY KEY
)
SQL
@db.exec("DROP TABLE backup.#{table_name}")
@db.exec <<-SQL
SELECT * INTO backup.#{table_name}
FROM public.#{table_name}
SQL
end
end