38 lines
1.2 KiB
SQL
38 lines
1.2 KiB
SQL
-- Añadir columna generada url_norm y crear índice único sobre ella.
|
|
-- OJO: si ya existen duplicados, este índice fallará.
|
|
-- Primero crea la columna si no existe:
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_name='feeds' AND column_name='url_norm'
|
|
) THEN
|
|
ALTER TABLE feeds
|
|
ADD COLUMN url_norm text GENERATED ALWAYS AS (normalize_url(url)) STORED;
|
|
END IF;
|
|
END $$;
|
|
|
|
-- Índice único (concurrently para no bloquear). Requiere estar fuera de transacción.
|
|
-- Si tu herramienta corre todo en una transacción, ejecuta estas dos líneas aparte.
|
|
-- Quita duplicados antes si da error.
|
|
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS feeds_url_norm_uniq ON feeds (url_norm)
|
|
WHERE url_norm IS NOT NULL;
|
|
|
|
-- (Opcional) repetir lo mismo para fuentes_url y noticias si quieres esa garantía también:
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF NOT EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_name='fuentes_url' AND column_name='url_norm'
|
|
) THEN
|
|
ALTER TABLE fuentes_url
|
|
ADD COLUMN url_norm text GENERATED ALWAYS AS (normalize_url(url)) STORED;
|
|
END IF;
|
|
END $$;
|
|
|
|
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS fuentes_url_norm_uniq ON fuentes_url (url_norm)
|
|
WHERE url_norm IS NOT NULL;
|
|
|
|
|