Revert "fix: geojson invalid query on unavailable PostGIS"

This reverts commit 0f1ca8faac.

Reverting for now as it adds one more query to the schema cache and
there's no clear way forward on how to integrate the fix with the
current schema cache queries.

See discussion on
https://github.com/PostgREST/postgrest/pull/4246#pullrequestreview-3093174224.
This commit is contained in:
steve-chavez
2025-08-13 14:54:53 -05:00
committed by Steve Chavez
parent c9272b0088
commit 1dce4a9321
4 changed files with 9 additions and 49 deletions
+4 -36
View File
@@ -152,7 +152,6 @@ querySchemaCache conf@AppConfig{..} = do
reps <- SQL.statement conf $ dataRepresentations prepared
mHdlers <- SQL.statement conf $ mediaHandlers prepared
tzones <- SQL.statement mempty $ timezones prepared
hasPgis <- SQL.statement conf $ postgisFunc prepared
_ <-
let sleepCall = SQL.Statement "select pg_sleep($1 / 1000.0)" (param HE.int4) HD.noResult prepared in
whenJust configInternalSCSleep (`SQL.statement` sleepCall) -- only used for testing
@@ -165,7 +164,7 @@ querySchemaCache conf@AppConfig{..} = do
, dbRelationships = getOverrideRelationshipsMap rels cRels
, dbRoutines = funcs
, dbRepresentations = reps
, dbMediaHandlers = HM.union mHdlers $ initialMediaHandlers hasPgis -- the custom handlers will override the initial ones
, dbMediaHandlers = HM.union mHdlers initialMediaHandlers -- the custom handlers will override the initial ones
, dbTimezones = tzones
}
where
@@ -1049,14 +1048,12 @@ allViewsKeyDependencies =
having ncol = array_length(array_agg(row(col.attname, view_columns) order by pks_fks.ord), 1)
|]
initialMediaHandlers :: Bool -> MediaHandlerMap
initialMediaHandlers hasPostgisFunc =
initialMediaHandlers :: MediaHandlerMap
initialMediaHandlers =
HM.insert (RelAnyElement, MediaType.MTAny ) (BuiltinOvAggJson, MediaType.MTApplicationJSON) $
HM.insert (RelAnyElement, MediaType.MTApplicationJSON) (BuiltinOvAggJson, MediaType.MTApplicationJSON) $
HM.insert (RelAnyElement, MediaType.MTTextCSV ) (BuiltinOvAggCsv, MediaType.MTTextCSV) $
(if hasPostgisFunc
then HM.insert (RelAnyElement, MediaType.MTGeoJSON ) (BuiltinOvAggGeoJson, MediaType.MTGeoJSON)
else mempty)
HM.insert (RelAnyElement, MediaType.MTGeoJSON ) (BuiltinOvAggGeoJson, MediaType.MTGeoJSON)
HM.empty
mediaHandlers :: Bool -> SQL.Statement AppConfig MediaHandlerMap
@@ -1142,35 +1139,6 @@ timezones = SQL.Statement sql HE.noParams decodeTimezones
decodeTimezones :: HD.Result TimezoneNames
decodeTimezones = S.fromList <$> HD.rowList (column HD.text)
-- Find the postgis function that has the signature:
-- st_asgeojson(record,...) returns text
postgisFunc :: Bool -> SQL.Statement AppConfig Bool
postgisFunc = SQL.Statement sql params decoder
where
params =
(map escapeIdent . toList . configDbSchemas >$< arrayParam HE.text) <>
(map escapeIdent . toList . configDbExtraSearchPath >$< arrayParam HE.text)
decoder = HD.singleRow (column HD.bool)
sql = encodeUtf8 [trimming|
SELECT
exists(
SELECT
1
FROM pg_catalog.pg_proc AS p
JOIN pg_catalog.pg_depend AS d
ON d.objid = p.oid
AND d.deptype = 'e'
JOIN pg_catalog.pg_extension AS e
ON e.oid = d.refobjid
WHERE p.pronamespace = ANY($$1::regnamespace[] || $$2::regnamespace[])
AND p.proname = 'st_asgeojson'
AND e.extname = 'postgis'
AND p.proargtypes[0] = 'record'::regtype
AND pg_get_function_result(p.oid) = 'text'
);
|]
param :: HE.Value a -> HE.Params a
param = HE.param . HE.nonNullable