coldFusion 中的 postgresql UUID 等价物

标签 postgresql coldfusion uuid postgresql-9.1

我有一个表 session ,它在 postgres 中有 UUID 类型的 sess_uuid 列,我的问题是我必须使用查询从 coldFusion cfQuery 更新 session 表:

UPDATE sessions
    SET     sess_frn_usr_id = 1 
    WHERE   sess_uuid = <cfqueryparam value="#arguments.SessionToSave.get('sessUuid')#" cfsqltype="cf_sql_other">   

此查询中的问题是 sess_uuid 列在数据库中是 UUID 类型,而在 ColdFusion 中,等效类型是 cf_sql_other,这不适用于此。错误是:

ERROR: operator does not exist: uuid = character varying

这里要使用 ColdFusion 中的哪个 cf_sql 类型来映射 postgres 中的 UUID 列?

最佳答案

我针对 PostgreSQL 9.1 使用 CF9.0 和 10 测试了您的查询,并且键入 cf_sql_other 工作得很好。因此,要么这不是导致错误的实际查询,要么可能发生了我们无法看到的其他事情。您的 DSN 是否有任何特殊的 jdbc 连接设置?

    ERROR: operator does not exist: uuid = character varying

Which cf_sql type in ColdFusion is to be used here to map UUID column in postgres?

基于我的有限测试和 a few quick searches , cf_sql_other 是与 CF9+ 中捆绑的 PostgreSQL 驱动程序一起使用的正确类型。在 jdbc 3 中没有 PostgreSQL 的 uuid 类型的直接等价物,所以输入 OTHER用于指示它是特定于数据库的,并且驱动程序内部从那里获取它。

我只能通过使用 string 类型之一重现您的错误,例如 cf_sql_varchar 或省略 cfsqltype 所以它默认为cf_sql_char。鉴于错误消息,不支持直接比较 uuid 和字符串。您必须先将 uuid 显式转换为字符串(反之亦然)。下面的所有示例都适用于 CF9+ 和 PostgreSQL 9.1。

  <!--- uuid = "d0c2b125-9222-d479-fb4a-be912b8c7c3b" --->
  <!--- syntax 1 ---->
  WHERE   CAST(sess_uuid AS VARCHAR)  = <cfqueryparam value="#uuid#" cfsqltype="cf_sql_varchar">   

  <!--- syntax 2 ---->
  WHERE   sess_uuid::text  = <cfqueryparam value="#uuid#" cfsqltype="cf_sql_varchar">   

  <!--- syntax 3 --->
  WHERE   sess_uuid  = <cfqueryparam value="#uuid#" cfsqltype="cf_sql_varchar">::uuid   

虽然我不推荐它,但值得注意的是省略 cfqueryparam 也有效。由于与 varchar 值的直接比较失败(即使在 postgresql 中),我猜在这种情况下会发生一些额外的转换魔法。

  <!--- fails --->
  WHERE   sess_uuid = CAST('#uuid#' AS VARCHAR)

  <!--- works --->
  WHERE   sess_uuid = '#uuid#'

关于coldFusion 中的 postgresql UUID 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14122777/

相关文章:

javascript - javascript 生成的 uuid 有多独特和随机?

sql - 树的迭代深度

java - 从 ColdFusion 启动测试 SMTP 服务器

javascript - 冷融合下载文件

java - 在 MYSQL 表中存储 UUID 的各种选项及其权衡是什么?

ios - 在 'uuid' 类型的对象上找不到属性 'CBPeripheral *'

sql - PostgreSQL 查询选择除这些以外的所有

postgresql - SQL 函数 - 将日期参数设置为具有空默认值会中断该函数

c# - 使用 C# 插入到 postgresql 表中

oop - API — CFC与cfinclude