c10fa98d0a
Restore original migrations (001-120) to fix schema_migrations version mismatch * Restore original migrations (001-120) to fix schema_migrations version mismatch The previous migration collapse broke deployed databases because: - Dev database was at version 120 (the real remove_text_extraction migration) - Main had collapsed migrations (001-012) + stub files (119_stub, 120_stub) - The migrate tool couldn't find version 119/120 with matching content This commit restores the original 27 migrations (versions 001-120) from before the collapse, ensuring backward compatibility with existing databases.
124 lines
4.3 KiB
PL/PgSQL
124 lines
4.3 KiB
PL/PgSQL
CREATE VIEW collectorCurrentActiveVersions AS
|
|
SELECT
|
|
c.clientId,
|
|
COALESCE(v.versionId, 0)::int AS activeVersion
|
|
FROM
|
|
clients c
|
|
LEFT JOIN (
|
|
SELECT DISTINCT ON (clientId)
|
|
clientId,
|
|
versionId
|
|
FROM
|
|
collectorActiveVersions
|
|
ORDER BY clientId, id DESC
|
|
) v ON c.clientId = v.clientId;
|
|
|
|
CREATE VIEW collectorLatestVersions as
|
|
SELECT
|
|
j.clientId,
|
|
coalesce(max(v.id), 0)::int as latestVersion
|
|
FROM clients as j
|
|
LEFT JOIN collectorVersions as v on v.clientId = j.clientId
|
|
GROUP BY j.clientId;
|
|
|
|
CREATE VIEW currentCollectorMinTextVersions as
|
|
SELECT DISTINCT
|
|
av.clientId,
|
|
coalesce(ctv.versionId, 0) as minTextVersion
|
|
FROM collectorCurrentActiveVersions as av
|
|
LEFT JOIN collectorMinTextVersions AS ctv ON av.clientId = ctv.clientId
|
|
and isInVersion(av.activeVersion, ctv.addedVersion, ctv.removedVersion);
|
|
|
|
CREATE VIEW currentCollectorMinCleanVersions as
|
|
SELECT DISTINCT
|
|
av.clientId,
|
|
coalesce(ctv.versionId, 0) as minCleanVersion
|
|
FROM collectorCurrentActiveVersions as av
|
|
LEFT JOIN collectorMinCleanVersions AS ctv ON av.clientId = ctv.clientId
|
|
and isInVersion(av.activeVersion, ctv.addedVersion, ctv.removedVersion);
|
|
|
|
CREATE VIEW currentCollectorQueries as
|
|
SELECT DISTINCT
|
|
av.clientId,
|
|
q.name,
|
|
q.queryId
|
|
FROM collectorCurrentActiveVersions as av
|
|
LEFT JOIN collectorQueries AS q ON av.clientId = q.clientId
|
|
and isInVersion(av.activeVersion, q.addedVersion, q.removedVersion);
|
|
|
|
CREATE VIEW currentCollectorQueriesJSONAGG as
|
|
SELECT DISTINCT
|
|
clientId,
|
|
jsonb_object_agg(name, queryId) FILTER (WHERE name is not null) AS fields
|
|
FROM currentCollectorQueries
|
|
GROUP BY clientId;
|
|
|
|
CREATE VIEW fullActiveCollectors AS
|
|
SELECT DISTINCT av.clientId,
|
|
ccv.minCleanVersion, ctv.minTextVersion,
|
|
av.activeVersion, lv.latestVersion,
|
|
q.fields
|
|
FROM collectorCurrentActiveVersions as av
|
|
JOIN collectorLatestVersions as lv on lv.clientId = av.clientId
|
|
JOIN currentCollectorMinCleanVersions AS ccv ON av.clientId = ccv.clientId
|
|
JOIN currentCollectorMinTextVersions AS ctv ON av.clientId = ctv.clientId
|
|
JOIN currentCollectorQueriesJSONAGG AS q ON av.clientId = q.clientId;
|
|
|
|
CREATE VIEW collectorQueryDependencyTree AS
|
|
WITH RECURSIVE collectorQueryDependencyTree AS (
|
|
SELECT cq.clientId, cq.queryId, ri.requiredIds
|
|
FROM currentCollectorQueries as cq
|
|
JOIN queryCurrentRequiredIdsAGG as ri on cq.queryId = ri.queryId
|
|
|
|
UNION ALL
|
|
|
|
SELECT acq.clientId, q.queryId, q.requiredIds
|
|
FROM queryCurrentRequiredIdsAGG as q
|
|
JOIN collectorQueryDependencyTree as acq on q.queryId = ANY(acq.requiredIds)
|
|
)
|
|
SELECT DISTINCT ct.clientId, ct.queryId, q.queryType, av.activeVersion as queryVersion, ct.requiredIds
|
|
FROM collectorQueryDependencyTree as ct
|
|
JOIN queryCurrentActiveVersions as av on ct.queryId = av.queryId
|
|
JOIN queries as q on q.queryId = ct.queryId;
|
|
|
|
|
|
CREATE OR REPLACE FUNCTION collectorQueryDependencyTreeByClient(
|
|
_clientId varchar(255)
|
|
)
|
|
RETURNS TABLE (
|
|
clientId varchar(255),
|
|
queryId uuid,
|
|
queryType queryType,
|
|
queryVersion int,
|
|
requiredIds uuid[]
|
|
) AS $$
|
|
BEGIN
|
|
RETURN QUERY
|
|
WITH clientQueries as (
|
|
SELECT q.clientId, q.queryId
|
|
FROM currentCollectorQueries as q
|
|
WHERE q.clientId = _clientId
|
|
),
|
|
dependencyTree as (
|
|
WITH RECURSIVE collectorQueryDependencyTree AS (
|
|
SELECT cq.clientId, cq.queryId, ri.requiredIds
|
|
FROM clientQueries as cq
|
|
JOIN queryCurrentRequiredIdsAGG as ri on cq.queryId = ri.queryId
|
|
|
|
UNION ALL
|
|
|
|
SELECT acq.clientId, q.queryId, q.requiredIds
|
|
FROM queryCurrentRequiredIdsAGG as q
|
|
JOIN collectorQueryDependencyTree as acq on q.queryId = ANY(acq.requiredIds)
|
|
)
|
|
SELECT DISTINCT ct.clientId, ct.queryId, q.queryType, av.activeVersion as queryVersion, ct.requiredIds
|
|
FROM collectorQueryDependencyTree as ct
|
|
JOIN queryCurrentActiveVersions as av on ct.queryId = av.queryId
|
|
JOIN queries as q on q.queryId = ct.queryId
|
|
)
|
|
SELECT t.clientId, t.queryId, t.queryType, t.queryVersion, t.requiredIds
|
|
FROM dependencyTree as t
|
|
WHERE t.clientID is not null;
|
|
END;
|
|
$$ LANGUAGE plpgsql;
|