From: Thomas Butz Date: Thu, 13 Mar 2025 09:04:40 +0000 (+0100) Subject: Mark functions as PARALLEL SAFE X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/d86d491f2e8dd6342207c0d96d35641316fc2926?ds=sidebyside Mark functions as PARALLEL SAFE --- diff --git a/lib-sql/functions/address_lookup.sql b/lib-sql/functions/address_lookup.sql index 26ce2073..6d7a7bd5 100644 --- a/lib-sql/functions/address_lookup.sql +++ b/lib-sql/functions/address_lookup.sql @@ -47,7 +47,7 @@ BEGIN RETURN trim((avals(name))[array_length(avals(name), 1)]); END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; --housenumber only needed for tiger data @@ -84,7 +84,7 @@ BEGIN RETURN array_to_string(result,', '); END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; DROP TYPE IF EXISTS addressdata_place; CREATE TYPE addressdata_place AS ( @@ -331,4 +331,4 @@ BEGIN RETURN; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; diff --git a/lib-sql/functions/importance.sql b/lib-sql/functions/importance.sql index 1de5899c..4993d70b 100644 --- a/lib-sql/functions/importance.sql +++ b/lib-sql/functions/importance.sql @@ -65,7 +65,7 @@ BEGIN RETURN NULL; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; {% else %} @@ -78,7 +78,7 @@ SELECT convert_from(CAST(E'\\x' || array_to_string(ARRAY( FROM regexp_matches($1, '%[0-9a-f][0-9a-f]|.', 'gi') AS r(m) ), '') AS bytea), 'UTF8'); $$ -LANGUAGE SQL IMMUTABLE STRICT; +LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION catch_decode_url_part(p varchar) @@ -91,7 +91,7 @@ EXCEPTION WHEN others THEN return null; END; $$ -LANGUAGE plpgsql IMMUTABLE STRICT; +LANGUAGE plpgsql IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_wikipedia_match(extratags HSTORE, country_code varchar(2)) @@ -139,7 +139,7 @@ BEGIN RETURN NULL; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; {% endif %} @@ -203,5 +203,5 @@ BEGIN RETURN result; END; $$ -LANGUAGE plpgsql; +LANGUAGE plpgsql PARALLEL SAFE; diff --git a/lib-sql/functions/interpolation.sql b/lib-sql/functions/interpolation.sql index 2fd21e8a..452ef7c3 100644 --- a/lib-sql/functions/interpolation.sql +++ b/lib-sql/functions/interpolation.sql @@ -34,7 +34,7 @@ BEGIN RETURN in_address; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; @@ -70,7 +70,7 @@ BEGIN RETURN parent_place_id; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION reinsert_interpolation(way_id BIGINT, addr HSTORE, diff --git a/lib-sql/functions/partition-functions.sql b/lib-sql/functions/partition-functions.sql index 595e4a61..d3c83615 100644 --- a/lib-sql/functions/partition-functions.sql +++ b/lib-sql/functions/partition-functions.sql @@ -58,7 +58,7 @@ BEGIN RAISE EXCEPTION 'Unknown partition %', in_partition; END $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_address_place(in_partition SMALLINT, feature GEOMETRY, @@ -87,7 +87,7 @@ BEGIN RAISE EXCEPTION 'Unknown partition %', in_partition; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; create or replace function deleteLocationArea(in_partition INTEGER, in_place_id BIGINT, in_rank_search INTEGER) RETURNS BOOLEAN AS $$ @@ -172,7 +172,7 @@ BEGIN RAISE EXCEPTION 'Unknown partition %', in_partition; END $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION getNearestNamedPlacePlaceId(in_partition INTEGER, point GEOMETRY, @@ -202,7 +202,7 @@ BEGIN RAISE EXCEPTION 'Unknown partition %', in_partition; END $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; create or replace function insertSearchName( in_partition INTEGER, in_place_id BIGINT, in_name_vector INTEGER[], @@ -310,7 +310,7 @@ BEGIN RAISE EXCEPTION 'Unknown partition %', in_partition; END $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION getNearestParallelRoadFeature(in_partition INTEGER, line GEOMETRY) @@ -354,4 +354,4 @@ BEGIN RAISE EXCEPTION 'Unknown partition %', in_partition; END $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; diff --git a/lib-sql/functions/placex_triggers.sql b/lib-sql/functions/placex_triggers.sql index 9d0d73b5..8524ffc3 100644 --- a/lib-sql/functions/placex_triggers.sql +++ b/lib-sql/functions/placex_triggers.sql @@ -109,7 +109,7 @@ BEGIN RETURN result; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION find_associated_street(poi_osm_type CHAR(1), @@ -200,7 +200,7 @@ BEGIN RETURN result; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; -- Find the parent road of a POI. @@ -286,7 +286,7 @@ BEGIN RETURN parent_place_id; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; -- Try to find a linked place for the given object. CREATE OR REPLACE FUNCTION find_linked_place(bnd placex) @@ -404,7 +404,7 @@ BEGIN RETURN NULL; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION create_poi_search_terms(obj_place_id BIGINT, diff --git a/lib-sql/functions/ranking.sql b/lib-sql/functions/ranking.sql index 97a0cde3..c16ad1db 100644 --- a/lib-sql/functions/ranking.sql +++ b/lib-sql/functions/ranking.sql @@ -29,7 +29,7 @@ BEGIN RETURN 0.02; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Return an approximate update radius according to the search rank. @@ -60,7 +60,7 @@ BEGIN RETURN 0; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Compute a base address rank from the extent of the given geometry. -- @@ -107,7 +107,7 @@ BEGIN RETURN 23; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Guess a ranking for postcodes from country and postcode format. @@ -167,7 +167,7 @@ BEGIN END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Get standard search and address rank for an object. @@ -236,7 +236,7 @@ BEGIN END IF; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_addr_tag_rank(key TEXT, country TEXT, OUT from_rank SMALLINT, @@ -283,7 +283,7 @@ BEGIN END LOOP; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION weigh_search(search_vector INT[], @@ -304,4 +304,4 @@ BEGIN RETURN def_weight; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; diff --git a/lib-sql/functions/utils.sql b/lib-sql/functions/utils.sql index 534beb58..30f94080 100644 --- a/lib-sql/functions/utils.sql +++ b/lib-sql/functions/utils.sql @@ -24,7 +24,7 @@ BEGIN RETURN ST_PointOnSurface(place); END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION geometry_sector(partition INTEGER, place GEOMETRY) @@ -34,7 +34,7 @@ BEGIN RETURN (partition*1000000) + (500-ST_X(place)::INTEGER)*1000 + (500-ST_Y(place)::INTEGER); END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; @@ -60,7 +60,7 @@ BEGIN RETURN r; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Return the node members with a given label from a relation member list -- as a set. @@ -88,7 +88,7 @@ BEGIN RETURN; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_rel_node_members(members JSONB, memberLabels TEXT[]) @@ -107,7 +107,7 @@ BEGIN RETURN; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Copy 'name' to or from the default language. @@ -136,7 +136,7 @@ BEGIN END IF; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; -- Find the nearest artificial postcode for the given geometry. @@ -172,7 +172,7 @@ BEGIN RETURN outcode; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_country_code(place geometry) @@ -233,7 +233,7 @@ BEGIN RETURN NULL; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_country_language_code(search_country_code VARCHAR(2)) @@ -251,7 +251,7 @@ BEGIN RETURN NULL; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION get_partition(in_country_code VARCHAR(10)) @@ -268,7 +268,7 @@ BEGIN RETURN 0; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; -- Find the parent of an address with addr:street/addr:place tag. @@ -299,7 +299,7 @@ BEGIN RETURN parent_place_id; END; $$ -LANGUAGE plpgsql STABLE; +LANGUAGE plpgsql STABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION delete_location(OLD_place_id BIGINT) @@ -337,7 +337,7 @@ BEGIN ST_Project(geom::geography, radius, 3.9269908)::geometry)); END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION add_location(place_id BIGINT, country_code varchar(2), @@ -455,7 +455,7 @@ BEGIN RETURN; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION split_geometry(geometry GEOMETRY) @@ -483,7 +483,7 @@ BEGIN RETURN; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION simplify_large_polygons(geometry GEOMETRY) RETURNS GEOMETRY @@ -497,7 +497,7 @@ BEGIN RETURN geometry; END; $$ -LANGUAGE plpgsql IMMUTABLE; +LANGUAGE plpgsql IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION place_force_delete(placeid BIGINT) diff --git a/lib-sql/tokenizer/icu_tokenizer.sql b/lib-sql/tokenizer/icu_tokenizer.sql index 04fcedcb..f0c30f1b 100644 --- a/lib-sql/tokenizer/icu_tokenizer.sql +++ b/lib-sql/tokenizer/icu_tokenizer.sql @@ -12,7 +12,7 @@ CREATE OR REPLACE FUNCTION token_get_name_search_tokens(info JSONB) RETURNS INTEGER[] AS $$ SELECT (info->>'names')::INTEGER[] -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; -- Get tokens for matching the place name against others. @@ -22,7 +22,7 @@ CREATE OR REPLACE FUNCTION token_get_name_match_tokens(info JSONB) RETURNS INTEGER[] AS $$ SELECT (info->>'names')::INTEGER[] -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; -- Return the housenumber tokens applicable for the place. @@ -30,7 +30,7 @@ CREATE OR REPLACE FUNCTION token_get_housenumber_search_tokens(info JSONB) RETURNS INTEGER[] AS $$ SELECT (info->>'hnr_tokens')::INTEGER[] -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; -- Return the housenumber in the form that it can be matched during search. @@ -38,77 +38,77 @@ CREATE OR REPLACE FUNCTION token_normalized_housenumber(info JSONB) RETURNS TEXT AS $$ SELECT info->>'hnr'; -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_is_street_address(info JSONB) RETURNS BOOLEAN AS $$ SELECT info->>'street' is not null or info->>'place' is null; -$$ LANGUAGE SQL IMMUTABLE; +$$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_has_addr_street(info JSONB) RETURNS BOOLEAN AS $$ SELECT info->>'street' is not null and info->>'street' != '{}'; -$$ LANGUAGE SQL IMMUTABLE; +$$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_has_addr_place(info JSONB) RETURNS BOOLEAN AS $$ SELECT info->>'place' is not null; -$$ LANGUAGE SQL IMMUTABLE; +$$ LANGUAGE SQL IMMUTABLE PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_matches_street(info JSONB, street_tokens INTEGER[]) RETURNS BOOLEAN AS $$ SELECT (info->>'street')::INTEGER[] && street_tokens -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_matches_place(info JSONB, place_tokens INTEGER[]) RETURNS BOOLEAN AS $$ SELECT (info->>'place')::INTEGER[] <@ place_tokens -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_addr_place_search_tokens(info JSONB) RETURNS INTEGER[] AS $$ SELECT (info->>'place')::INTEGER[] -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_get_address_keys(info JSONB) RETURNS SETOF TEXT AS $$ SELECT * FROM jsonb_object_keys(info->'addr'); -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_get_address_search_tokens(info JSONB, key TEXT) RETURNS INTEGER[] AS $$ SELECT (info->'addr'->>key)::INTEGER[]; -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_matches_address(info JSONB, key TEXT, tokens INTEGER[]) RETURNS BOOLEAN AS $$ SELECT (info->'addr'->>key)::INTEGER[] <@ tokens; -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; CREATE OR REPLACE FUNCTION token_get_postcode(info JSONB) RETURNS TEXT AS $$ SELECT info->>'postcode'; -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; -- Return token info that should be saved permanently in the database. @@ -116,7 +116,7 @@ CREATE OR REPLACE FUNCTION token_strip_info(info JSONB) RETURNS JSONB AS $$ SELECT NULL::JSONB; -$$ LANGUAGE SQL IMMUTABLE STRICT; +$$ LANGUAGE SQL IMMUTABLE STRICT PARALLEL SAFE; --------------- private functions ----------------------------------------------