Error with UUID Field Filter in Native SQL Query

Hello,

I am encountering an error when using a field filter on a UUID column in a native SQL query.

I have a table energy_service with a column PES name of type UUID (it is neither a Primary Key nor a Foreign Key). I am trying to use a field filter (variable) for this column in my SQL query.

Query:
SELECT * FROM complaint.energy_service WHERE {{Pes}}

When I execute the query, I get the error: Error running query. I expect the field filter to work correctly, allowing me to filter results based on the UUID value, similar to how it works with text columns.

The same query structure works perfectly if I replace {{Pes}} with a field filter for a column of text type (e.g., WHERE {{TextColumn}}).

What i do wrong? It my mistake or a some bug?

Metabase Version: 0.55.7.2
Database: PostgreSQL 15.8

[601d17d0-9605-4330-a4a8-5ea545c43b92] 2025-09-10T10:35:04+03:00 ERROR metabase.query-processor.middleware.catch-exceptions Error processing query: Error running query
{:database_id 2,
 :parameterized true,
 :started_at #t "2025-09-10T07:35:04.004946369Z[GMT]",
 :via
 [{:status :failed,
   :class clojure.lang.ExceptionInfo,
   :error "Unable to substitute parameters: null",
   :stacktrace
   ["--> driver.sql.parameters.substitute$substitute$fn__94551.invoke(substitute.clj:91)"
    "driver.sql.parameters.substitute$substitute.invokeStatic(substitute.clj:88)"
    "driver.sql.parameters.substitute$substitute.invoke(substitute.clj:78)"
    "driver.sql$fn__94584$f__13051__auto____94586.invoke(sql.clj:64)"
    "query_processor.middleware.parameters.native$expand_inner.invokeStatic(native.clj:43)"
    "query_processor.middleware.parameters.native$expand_inner.invoke(native.clj:34)"
    "query_processor.middleware.parameters$expand_one.invokeStatic(parameters.clj:66)"
    "query_processor.middleware.parameters$expand_one.invoke(parameters.clj:57)"
    "query_processor.middleware.parameters$expand_all$replace_77839__77840.invoke(parameters.clj:77)"
    "lib.util.match.impl$replace_in_collection$fn__17228.invoke(impl.cljc:53)"
    "lib.util.match.impl$replace_in_collection.invokeStatic(impl.cljc:52)"
    "lib.util.match.impl$replace_in_collection.invoke(impl.cljc:47)"
    "query_processor.middleware.parameters$expand_all$replace_77839__77840.invoke(parameters.clj:75)"
    "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:75)"
    "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:69)"
    "query_processor.middleware.parameters$expand_all.invokeStatic(parameters.clj:72)"
    "query_processor.middleware.parameters$expand_all.invoke(parameters.clj:69)"
    "query_processor.middleware.parameters$expand_parameters.invokeStatic(parameters.clj:99)"
    "query_processor.middleware.parameters$expand_parameters.invoke(parameters.clj:94)"
    "query_processor.middleware.parameters$substitute_parameters_STAR_.invokeStatic(parameters.clj:108)"
    "query_processor.middleware.parameters$substitute_parameters_STAR_.invoke(parameters.clj:105)"
    "query_processor.middleware.parameters$substitute_parameters.invokeStatic(parameters.clj:135)"
    "query_processor.middleware.parameters$substitute_parameters.invoke(parameters.clj:126)"
    "query_processor.preprocess$ensure_legacy$fn__79187.invoke(preprocess.clj:64)"
    "query_processor.preprocess$preprocess$fn__79206$fn__79207.invoke(preprocess.clj:164)"
    "query_processor.preprocess$preprocess$fn__79206.invoke(preprocess.clj:154)"
    "query_processor.setup$do_with_qp_setup.invokeStatic(setup.clj:225)"
    "query_processor.setup$do_with_qp_setup.invoke(setup.clj:216)"
    "query_processor.preprocess$preprocess.invokeStatic(preprocess.clj:152)"
    "query_processor.preprocess$preprocess.invoke(preprocess.clj:148)"
    "query_processor$process_query_STAR__STAR_.invokeStatic(query_processor.clj:47)"
    "query_processor$process_query_STAR__STAR_.invoke(query_processor.clj:45)"
    "query_processor.middleware.enterprise$fn__76172$handle_audit_app_internal_queries__76173$fn__76175.invoke(enterprise.clj:135)"
    "query_processor.middleware.enterprise$handle_audit_app_internal_queries_middleware$fn__76183.invoke(enterprise.clj:142)"
    "query_processor.middleware.process_userland_query$process_userland_query_middleware$fn__84691.invoke(process_userland_query.clj:177)"
    "query_processor.middleware.catch_exceptions$catch_exceptions$fn__84751.invoke(catch_exceptions.clj:137)"
    "query_processor$process_query$fn__84791.invoke(query_processor.clj:81)"
    "query_processor.setup$do_with_canceled_chan$fn__76404.invoke(setup.clj:187)"
    "query_processor.setup$do_with_database_local_settings$fn__76398.invoke(setup.clj:181)"
    "query_processor.setup$do_with_driver$fn__76392$fn__76393.invoke(setup.clj:166)"
    "driver$do_with_driver.invokeStatic(driver.clj:48)"
    "driver$do_with_driver.invoke(driver.clj:43)"
    "query_processor.setup$do_with_driver$fn__76392.invoke(setup.clj...

image

You may be experiencing the problem described in this issue (appears to not just affect Vertica):


EDIT: Did some experimentation. In Metabase 56.4.2, trying to filter on a UUID column generates a Java type conversion error:

class java.util.UUID cannot be cast to class java.lang.String (java.util.UUID and java.lang.String are in module java.base of loader 'bootstrap')

I can’t use table metadata type casting to change the type of this column, it wants to change it to a datetime/timestamp type instead of a straight text conversion.

Metabase can correctly filter a view of the table that casts the uuid column to text.