Packages
oban
2.19.2
2.23.0
2.22.1
2.22.0
2.21.1
2.21.0
2.20.3
2.20.2
2.20.1
2.20.0
2.19.4
2.19.3
2.19.2
2.19.1
2.19.0
2.18.3
2.18.2
2.18.1
2.18.0
2.17.12
2.17.11
2.17.10
2.17.9
2.17.8
2.17.7
2.17.6
2.17.5
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.3
2.16.2
2.16.1
2.16.0
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.2
2.14.1
2.14.0
2.13.6
2.13.5
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.1
2.12.0
2.11.3
2.11.2
2.11.1
2.11.0
2.10.1
2.10.0
retired
2.9.2
2.9.1
2.9.0
2.8.0
2.7.2
2.7.1
2.7.0
2.6.1
2.6.0
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.4
2.3.3
2.3.2
2.3.1
2.3.0
2.2.0
2.1.0
2.0.0
2.0.0-rc.3
2.0.0-rc.2
2.0.0-rc.1
2.0.0-rc.0
1.2.0
1.1.0
1.0.0
1.0.0-rc.2
1.0.0-rc.1
0.12.1
0.12.0
0.11.1
0.11.0
0.10.1
0.10.0
0.9.0
0.8.1
0.8.0
0.7.1
0.7.0
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
Robust job processing, backed by modern PostgreSQL, SQLite3, and MySQL.
Current section
Files
Jump to
Current section
Files
lib/oban/migrations/postgres/v09.ex
defmodule Oban.Migrations.Postgres.V09 do
@moduledoc false
use Ecto.Migration
def up(%{prefix: prefix, quoted_prefix: quoted}) do
alter table(:oban_jobs, prefix: prefix) do
add_if_not_exists(:meta, :map, default: %{})
add_if_not_exists(:cancelled_at, :utc_datetime_usec)
end
execute """
DO $$
DECLARE
version int;
already bool;
BEGIN
SELECT current_setting('server_version_num')::int INTO version;
SELECT '{cancelled}' <@ enum_range(NULL::#{quoted}.oban_job_state)::text[] INTO already;
IF already THEN
RETURN;
ELSIF version >= 120000 THEN
ALTER TYPE #{quoted}.oban_job_state ADD VALUE IF NOT EXISTS 'cancelled';
ELSE
ALTER TYPE #{quoted}.oban_job_state RENAME TO old_oban_job_state;
CREATE TYPE #{quoted}.oban_job_state AS ENUM (
'available',
'scheduled',
'executing',
'retryable',
'completed',
'discarded',
'cancelled'
);
ALTER TABLE #{quoted}.oban_jobs RENAME column state TO _state;
ALTER TABLE #{quoted}.oban_jobs ADD state #{quoted}.oban_job_state NOT NULL default 'available';
UPDATE #{quoted}.oban_jobs SET state = _state::text::#{quoted}.oban_job_state;
ALTER TABLE #{quoted}.oban_jobs DROP column _state;
DROP TYPE #{quoted}.old_oban_job_state;
END IF;
END$$;
"""
create_if_not_exists index(:oban_jobs, [:state, :queue, :priority, :scheduled_at, :id],
prefix: prefix
)
end
def down(%{prefix: prefix, quoted_prefix: quoted}) do
alter table(:oban_jobs, prefix: prefix) do
remove_if_exists(:meta, :map)
remove_if_exists(:cancelled_at, :utc_datetime_usec)
end
execute """
DO $$
BEGIN
UPDATE #{quoted}.oban_jobs SET state = 'discarded' WHERE state = 'cancelled';
ALTER TYPE #{quoted}.oban_job_state RENAME TO old_oban_job_state;
CREATE TYPE #{quoted}.oban_job_state AS ENUM (
'available',
'scheduled',
'executing',
'retryable',
'completed',
'discarded'
);
ALTER TABLE #{quoted}.oban_jobs RENAME column state TO _state;
ALTER TABLE #{quoted}.oban_jobs ADD state #{quoted}.oban_job_state NOT NULL default 'available';
UPDATE #{quoted}.oban_jobs SET state = _state::text::#{quoted}.oban_job_state;
ALTER TABLE #{quoted}.oban_jobs DROP column _state;
DROP TYPE #{quoted}.old_oban_job_state;
END$$;
"""
end
end