49 lines
1.5 KiB
Elixir
49 lines
1.5 KiB
Elixir
|
defmodule Mobilizon.Repo.Migrations.CreateSearchIndexes do
|
||
|
use Ecto.Migration
|
||
|
|
||
|
def change do
|
||
|
IO.puts("\n
|
||
|
#########################################################
|
||
|
# If the CREATE EXTENSION or DROP EXTENSION calls fail, #
|
||
|
# please manually execute them with an authorized #
|
||
|
# PostgreSQL user with SUPER USER role. #
|
||
|
#########################################################
|
||
|
\n
|
||
|
")
|
||
|
|
||
|
try do
|
||
|
execute("CREATE EXTENSION IF NOT EXISTS pg_trgm", "DROP EXTENSION IF EXISTS pg_trgm")
|
||
|
execute("CREATE EXTENSION IF NOT EXISTS unaccent", "DROP EXTENSION IF EXISTS unaccent")
|
||
|
|
||
|
execute(
|
||
|
"CREATE OR REPLACE FUNCTION public.f_unaccent(text)
|
||
|
RETURNS text AS
|
||
|
$func$
|
||
|
SELECT public.unaccent('public.unaccent', $1)
|
||
|
$func$ LANGUAGE sql IMMUTABLE;",
|
||
|
"DROP FUNCTION IF EXISTS public.f_unaccent"
|
||
|
)
|
||
|
|
||
|
execute(
|
||
|
"CREATE INDEX \"event_title_trigram\" ON \"events\" USING GIN (f_unaccent(title) gin_trgm_ops)",
|
||
|
"DROP INDEX IF EXISTS event_title_trigram"
|
||
|
)
|
||
|
|
||
|
execute(
|
||
|
"CREATE INDEX \"actor_preferred_username_trigram\" ON \"actors\"
|
||
|
USING GIN (f_unaccent(preferred_username) gin_trgm_ops)",
|
||
|
"DROP INDEX IF EXISTS actor_preferred_username_trigram"
|
||
|
)
|
||
|
|
||
|
execute(
|
||
|
"CREATE INDEX \"actor_name_trigram\" ON \"actors\"
|
||
|
USING GIN (f_unaccent(name) gin_trgm_ops)",
|
||
|
"DROP INDEX IF EXISTS actor_name_trigram"
|
||
|
)
|
||
|
rescue
|
||
|
e in Postgrex.Error ->
|
||
|
IO.puts(e.message)
|
||
|
end
|
||
|
end
|
||
|
end
|