Using ST_AsMVT

Erik Wienhold ewie at ewie.name
Sun Jul 6 07:20:17 PDT 2025


On 2025-07-06 14:40 +0200, Matthew Shaw wrote:
> I'm struggling to understand how to use ST_AsMVT.   It doesn't exist as a
> true function, but this PSQL command shows that it does exist as an "agg"
> 
> \df *st_asmvt*
> 
>  Schema |     Name     | Result data type |                   Argument data types                                                                                | Type
> --------+--------------+------------------+----------------------------------------------------------------------------------------------------------------------+------
>  public | st_asmvt     | bytea            | anyelement                                                                                                           | agg
>  public | st_asmvt     | bytea            | anyelement, text                                                                                                     | agg
>  public | st_asmvt     | bytea            | anyelement, text, integer                                                                                            | agg
>  public | st_asmvt     | bytea            | anyelement, text, integer, text                                                                                      | agg
>  public | st_asmvt     | bytea            | anyelement, text, integer, text, text                                                                                | agg
>  public | st_asmvtgeom | geometry         | geom geometry, bounds box2d, extent integer DEFAULT 4096, buffer integer DEFAULT 256, clip_geom boolean DEFAULT true | func
> 
> But as soon as I try to invoke ST_AsMVT, it errors:
> 
> select ST_AsMVT(tile, 'highways'::text, 4096, 'geom'::text, array['class'])
> from
>     (SELECT
>       ST_AsMVTGeom(geom,
>           ST_TileEnvelope(11,1019, 671),
>           4096, 64, true) AS geom,
>  class
>     FROM openstreetmap.highway
>     WHERE geom && ST_Transform(ST_TileEnvelope(11,1019, 671), 4326)) as tile
> 
> 
> ERROR: function st_asmvt(record, text, integer, text, text[]) does not
> exist LINE 3: select ST_AsMVT(tile, 'highways'::text, 4096, 'geom'::text,
> ... ^ HINT: No function matches the given name and argument types. You
> might need to add explicit type casts.

The last argument (feature_id_name) must be text, not an array.

-- 
Erik Wienhold


More information about the postgis-users mailing list