Files
wehub-resource-sync bf2343b7e4
Integration Tests - MySQL + Elasticsearch / Detect Changes (push) Has been cancelled
Integration Tests - MySQL + Elasticsearch / integration-tests-mysql-elasticsearch (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + Elasticsearch + Redis / integration-tests-postgres-elasticsearch-redis (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / Detect Changes (push) Has been cancelled
Integration Tests - PostgreSQL + OpenSearch / integration-tests-postgres-opensearch (push) Has been cancelled
Java Checkstyle / java-checkstyle (push) Has been cancelled
Maven Collate Tests / maven-collate-ci (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests-status (push) Has been cancelled
Publish Package to Maven Central Repository / publish-maven-packages (push) Has been cancelled
OpenMetadata Service Unit Tests / Detect Changes (push) Has been cancelled
OpenMetadata Service Unit Tests / openmetadata-service-unit-tests (push) Has been cancelled
OpenMetadata Service Unit Tests / k8s_operator-unit-tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:35:45 +08:00

63 lines
2.5 KiB
SQL

-- Boost memory for the dedup + index build. RESET at end.
SET work_mem = '256MB';
SET maintenance_work_mem = '512MB';
-- Dedup before the unique index rebuild. NULL filter on operation: Postgres
-- UNIQUE treats NULLs as DISTINCT, so the constraint never blocked tableProfile
-- / columnProfile rows (operation = NULL). GROUP BY treats NULLs as equal —
-- without the filter we'd collapse rows the constraint never rejected.
DELETE FROM profiler_data_time_series p
USING (
SELECT entityFQNHash, extension, operation, "timestamp", MAX(ctid) AS keep_ctid
FROM profiler_data_time_series
WHERE operation IS NOT NULL
AND entityFQNHash IS NOT NULL
GROUP BY entityFQNHash, extension, operation, "timestamp"
HAVING COUNT(*) > 1
) d
WHERE p.entityFQNHash = d.entityFQNHash
AND p.extension = d.extension
AND p.operation = d.operation
AND p."timestamp" = d."timestamp"
AND p.ctid <> d.keep_ctid;
-- Recover from a prior failed CREATE UNIQUE INDEX CONCURRENTLY: drop the
-- invalid leftover and rebuild inline so ALTER below can promote it.
DO $$
DECLARE
invalid_idx oid;
BEGIN
SELECT i.indexrelid INTO invalid_idx
FROM pg_index i
JOIN pg_class idx ON idx.oid = i.indexrelid
WHERE idx.relname = 'profiler_data_time_series_unique_hash_extension_ts'
AND i.indrelid = 'profiler_data_time_series'::regclass
AND NOT i.indisvalid;
IF invalid_idx IS NOT NULL THEN
EXECUTE 'DROP INDEX ' || invalid_idx::regclass;
EXECUTE 'CREATE UNIQUE INDEX profiler_data_time_series_unique_hash_extension_ts '
|| 'ON profiler_data_time_series '
|| '(entityFQNHash, extension, operation, "timestamp")';
END IF;
END $$;
-- Restore the unique constraint dropped in 1.9.9. Closes the 1.9.9 regression that caused
-- /columns?fields=profile 504s, and brings Postgres back in line with MySQL (which never
-- lost it). The leading (entityFQNHash, extension) prefix serves the column-profile batch query.
-- Two-phase: CONCURRENTLY build avoids ACCESS EXCLUSIVE lock; ADD CONSTRAINT USING INDEX
-- promotes the built index without re-scanning.
CREATE UNIQUE INDEX CONCURRENTLY IF NOT EXISTS
profiler_data_time_series_unique_hash_extension_ts
ON profiler_data_time_series (entityFQNHash, extension, operation, timestamp);
ALTER TABLE profiler_data_time_series
ADD CONSTRAINT profiler_data_time_series_unique_hash_extension_ts
UNIQUE USING INDEX profiler_data_time_series_unique_hash_extension_ts;
ANALYZE profiler_data_time_series;
-- Reset session memory before the connection returns to the pool.
RESET work_mem;
RESET maintenance_work_mem;