Mejora migraciones con tabla de versiones
This commit is contained in:
@@ -29,7 +29,7 @@ CREATE TABLE IF NOT EXISTS order_tracking (
|
||||
start_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'),
|
||||
update_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'),
|
||||
finish_date TIMESTAMP
|
||||
)
|
||||
);
|
||||
|
||||
-- Busqueda según id de rabbit
|
||||
CREATE INDEX IF NOT EXISTS idx_order_correlation
|
||||
@@ -40,7 +40,7 @@ CREATE INDEX IF NOT EXISTS pending_orders
|
||||
WHERE order_tracking.finish_date IS NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS order_history(
|
||||
id SERIAL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
order_id BIGINT NOT NULL,
|
||||
previous_status order_status NOT NULL, -- Siempre hay un estado anterior, para casos excepcioneale "unknown"
|
||||
new_status order_status NOT NULL,
|
||||
|
||||
@@ -15,7 +15,7 @@ CREATE TABLE if not exists objenious_operation (
|
||||
request_id TEXT,
|
||||
mass_action_id TEXT,
|
||||
operation TEXT NOT NULL,
|
||||
start_date TIMESTAMP NOT NULL DEFAULT now(),
|
||||
start_date TIMESTAMP NOT NULL DEFAULT now(),
|
||||
last_change_date TIMESTAMP NOT NULL DEFAULT now(),
|
||||
end_date TIMESTAMP,
|
||||
error TEXT,
|
||||
|
||||
15
deployment/database/base/03-versions.sql
Normal file
15
deployment/database/base/03-versions.sql
Normal file
@@ -0,0 +1,15 @@
|
||||
CREATE TABLE IF NOT EXISTS db_versions (
|
||||
version TEXT PRIMARY KEY, -- version semantica x.x.x
|
||||
notes TEXT,
|
||||
creation_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'),
|
||||
stable BOOLEAN DEFAULT FALSE -- Si la version ha sido testada y se puede desplegar
|
||||
);
|
||||
|
||||
INSERT INTO db_versions (
|
||||
version,
|
||||
notes
|
||||
)
|
||||
VALUES (
|
||||
'0.1.0',
|
||||
'Versión base'
|
||||
);
|
||||
@@ -2,7 +2,7 @@
|
||||
-- PostgreSQL database dump
|
||||
--
|
||||
|
||||
\restrict KSNzZnHZpEceNNT6ECpaur3DZ2vfo46zPOlHHzj65wcCLFVfh0bZaudbdKNNiIC
|
||||
\restrict n4DeGueXrI8Aidzy0srXafkz44IcO9Aq9s6hheFCSSTlVeaqyQcAQSMAfGX3yUg
|
||||
|
||||
-- Dumped from database version 16.11 (Ubuntu 16.11-0ubuntu0.24.04.1)
|
||||
-- Dumped by pg_dump version 16.11 (Ubuntu 16.11-0ubuntu0.24.04.1)
|
||||
@@ -63,6 +63,18 @@ SET default_tablespace = '';
|
||||
|
||||
SET default_table_access_method = heap;
|
||||
|
||||
--
|
||||
-- Name: db_versions; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.db_versions (
|
||||
version text NOT NULL,
|
||||
notes text,
|
||||
creation_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL,
|
||||
stable boolean DEFAULT false
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: objenious_operation; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
@@ -77,7 +89,7 @@ CREATE TABLE public.objenious_operation (
|
||||
mass_action_id text,
|
||||
operation text NOT NULL,
|
||||
start_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL,
|
||||
last_change_date timestamp without time zone DEFAULT now() NOT NULL,
|
||||
last_change_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL,
|
||||
end_date timestamp without time zone,
|
||||
error text,
|
||||
status public.status_enum,
|
||||
@@ -92,7 +104,7 @@ CREATE TABLE public.objenious_operation (
|
||||
CREATE TABLE public.objenious_operation_change (
|
||||
id bigint NOT NULL,
|
||||
operation_id bigint,
|
||||
creation_date timestamp without time zone DEFAULT now() NOT NULL,
|
||||
creation_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL,
|
||||
error text,
|
||||
new_status public.status_enum,
|
||||
previous_status public.status_enum,
|
||||
@@ -131,6 +143,77 @@ ALTER TABLE public.objenious_operation ALTER COLUMN id ADD GENERATED ALWAYS AS I
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_history; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.order_history (
|
||||
id bigint NOT NULL,
|
||||
order_id bigint NOT NULL,
|
||||
previous_status public.order_status NOT NULL,
|
||||
new_status public.order_status NOT NULL,
|
||||
change_reason text,
|
||||
change_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_history_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE public.order_history ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
|
||||
SEQUENCE NAME public.order_history_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_tracking; Type: TABLE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE TABLE public.order_tracking (
|
||||
id bigint NOT NULL,
|
||||
correlation_id character varying(255) NOT NULL,
|
||||
exchange character varying(100),
|
||||
routing_key character varying(100),
|
||||
order_type public.order_types DEFAULT 'unknown'::public.order_types NOT NULL,
|
||||
payload jsonb,
|
||||
status public.order_status DEFAULT 'pending'::public.order_status NOT NULL,
|
||||
retry_count integer DEFAULT 0,
|
||||
error_message text,
|
||||
error_stacktrace text,
|
||||
start_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL,
|
||||
update_date timestamp without time zone DEFAULT (now() AT TIME ZONE 'utc'::text) NOT NULL,
|
||||
finish_date timestamp without time zone
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_tracking_id_seq; Type: SEQUENCE; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE public.order_tracking ALTER COLUMN id ADD GENERATED ALWAYS AS IDENTITY (
|
||||
SEQUENCE NAME public.order_tracking_id_seq
|
||||
START WITH 1
|
||||
INCREMENT BY 1
|
||||
NO MINVALUE
|
||||
NO MAXVALUE
|
||||
CACHE 1
|
||||
);
|
||||
|
||||
|
||||
--
|
||||
-- Name: db_versions db_versions_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.db_versions
|
||||
ADD CONSTRAINT db_versions_pkey PRIMARY KEY (version);
|
||||
|
||||
|
||||
--
|
||||
-- Name: objenious_operation_change objenious_operation_change_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -147,6 +230,43 @@ ALTER TABLE ONLY public.objenious_operation
|
||||
ADD CONSTRAINT objenious_operation_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_history order_history_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.order_history
|
||||
ADD CONSTRAINT order_history_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_tracking order_tracking_pkey; Type: CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.order_tracking
|
||||
ADD CONSTRAINT order_tracking_pkey PRIMARY KEY (id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_order_change_date; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX idx_order_change_date ON public.order_history USING btree (change_date);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_order_correlation; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX idx_order_correlation ON public.order_tracking USING btree (correlation_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: idx_order_id; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX idx_order_id ON public.order_history USING btree (order_id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: operation_change; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
@@ -161,6 +281,13 @@ CREATE INDEX operation_change ON public.objenious_operation_change USING btree (
|
||||
CREATE INDEX pending_operations ON public.objenious_operation USING btree (start_date) WHERE (end_date IS NULL);
|
||||
|
||||
|
||||
--
|
||||
-- Name: pending_orders; Type: INDEX; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
CREATE INDEX pending_orders ON public.order_tracking USING btree (start_date) WHERE (finish_date IS NULL);
|
||||
|
||||
|
||||
--
|
||||
-- Name: objenious_operation_change fk_operation_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
@@ -169,9 +296,17 @@ ALTER TABLE ONLY public.objenious_operation_change
|
||||
ADD CONSTRAINT fk_operation_id FOREIGN KEY (operation_id) REFERENCES public.objenious_operation(id);
|
||||
|
||||
|
||||
--
|
||||
-- Name: order_history fk_order_id; Type: FK CONSTRAINT; Schema: public; Owner: -
|
||||
--
|
||||
|
||||
ALTER TABLE ONLY public.order_history
|
||||
ADD CONSTRAINT fk_order_id FOREIGN KEY (order_id) REFERENCES public.order_tracking(id) ON DELETE CASCADE;
|
||||
|
||||
|
||||
--
|
||||
-- PostgreSQL database dump complete
|
||||
--
|
||||
|
||||
\unrestrict KSNzZnHZpEceNNT6ECpaur3DZ2vfo46zPOlHHzj65wcCLFVfh0bZaudbdKNNiIC
|
||||
\unrestrict n4DeGueXrI8Aidzy0srXafkz44IcO9Aq9s6hheFCSSTlVeaqyQcAQSMAfGX3yUg
|
||||
|
||||
@@ -29,7 +29,7 @@ CREATE TABLE IF NOT EXISTS order_tracking (
|
||||
start_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'),
|
||||
update_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'),
|
||||
finish_date TIMESTAMP
|
||||
)
|
||||
);
|
||||
|
||||
-- Busqueda según id de rabbit
|
||||
CREATE INDEX IF NOT EXISTS idx_order_correlation
|
||||
@@ -40,7 +40,7 @@ CREATE INDEX IF NOT EXISTS pending_orders
|
||||
WHERE order_tracking.finish_date IS NULL;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS order_history(
|
||||
id SERIAL PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
|
||||
order_id BIGINT NOT NULL,
|
||||
previous_status order_status NOT NULL, -- Siempre hay un estado anterior, para casos excepcioneale "unknown"
|
||||
new_status order_status NOT NULL,
|
||||
@@ -78,7 +78,7 @@ CREATE TABLE if not exists objenious_operation (
|
||||
request_id TEXT,
|
||||
mass_action_id TEXT,
|
||||
operation TEXT NOT NULL,
|
||||
start_date TIMESTAMP NOT NULL DEFAULT now(),
|
||||
start_date TIMESTAMP NOT NULL DEFAULT now(),
|
||||
last_change_date TIMESTAMP NOT NULL DEFAULT now(),
|
||||
end_date TIMESTAMP,
|
||||
error TEXT,
|
||||
@@ -109,3 +109,18 @@ CREATE TABLE if not exists objenious_operation_change (
|
||||
|
||||
CREATE INDEX operation_change
|
||||
ON objenious_operation_change(operation_id);
|
||||
CREATE TABLE IF NOT EXISTS db_versions (
|
||||
version TEXT PRIMARY KEY, -- version semantica x.x.x
|
||||
notes TEXT,
|
||||
creation_date TIMESTAMP NOT NULL DEFAULT (now() at time zone 'utc'),
|
||||
stable BOOLEAN DEFAULT FALSE -- Si la version ha sido testada y se puede desplegar
|
||||
);
|
||||
|
||||
INSERT INTO db_versions (
|
||||
version,
|
||||
notes
|
||||
)
|
||||
VALUES (
|
||||
'0.1.0',
|
||||
'Versión base'
|
||||
);
|
||||
|
||||
@@ -4,3 +4,12 @@ ALTER TABLE objenious_operation
|
||||
|
||||
ALTER TABLE objenious_operation_change
|
||||
ALTER COLUMN creation_date SET DEFAULT (now() at time zone 'utc');
|
||||
|
||||
INSERT INTO db_versions (
|
||||
version,
|
||||
notes
|
||||
)
|
||||
VALUES (
|
||||
'1.0.0',
|
||||
'Fechas modificadas para que todas sean en base a UTC'
|
||||
);
|
||||
@@ -12,6 +12,7 @@ usage() {
|
||||
echo "Uso: $0 -v <version> [-e <ruta_env>]"
|
||||
echo " -v Versión semántica objetivo (ej: 1.2.0)"
|
||||
echo " -e (Opcional) Ruta al archivo .env para cargar variables"
|
||||
echo " Los archivos de verions tienen que tener el formato x.x.x_descripcion.sql (Es importante la _ para serpar las partes) "
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -84,7 +85,8 @@ for f in $(ls $MIGRATIONS_DIR/*.sql | sort -V); do
|
||||
FILE_VER=$(echo "$FILENAME" | sed -E 's/^V//' | awk -F_ '{print $1}')
|
||||
|
||||
# Comparación semántica
|
||||
LOWEST=$(echo -e "$FILE_VER\n$TARGET_VERSION" | sort -V | head -n1)
|
||||
echo "comparando $TARGET_VERSION con $FILE_VER"
|
||||
LOWEST=$(echo -e "$TARGET_VERSION\n$FILE_VER" | sort -V | head -n1)
|
||||
|
||||
if [ "$LOWEST" == "$FILE_VER" ] || [ "$FILE_VER" == "$TARGET_VERSION" ]; then
|
||||
echo "~> Aplicando: $FILENAME ($FILE_VER)"
|
||||
|
||||
Reference in New Issue
Block a user