如何在没有破折号的情况下在 pg-promise 中显示 UUID

问题描述

  • 根据 stackoverflow 问题 HERE postgres 列不存储 UUID 数据类型的破折号
  • 然而,当我使用 pg-promise 加载任何 UUID 列的值时,它总是显示破折号
  • 如何使用 pg-promise 在没有破折号的情况下检索这些 UUID

说明问题的代码示例

var pgPromise = require("pg-promise"),pgp = pgPromise({}),db = pgp({
        database: "mydatabase",host: "localhost",password: "somepass",port: 5432,ssl: false,user: "myuser"
    });
pgp.pg.types.setTypeParser(20,parseInt);
db.query("CREATE TABLE test(myid uuid not null primary key)")
.then((e => {
    var r = require("crypto").createHash("md5").update("test data").digest("hex");
    return db.query("INSERT INTO test(myid) VALUES($1) ON CONFLICT DO nothing",[r])
}))
.then((e => db.query("SELECT * FROM test")))
.then((e => (console.log(e),db.query("DROP TABLE test"))))
.then((() => console.log("test success!")))
.catch((e => console.error(e)));

解决方法

这条线成功了

pgp.pg.types.setTypeParser(pgp.pg.types.builtins.UUID,(val) => {
    val === null ? null : val.replace(/-/g,'')
});

感谢@vitaly-t 和@Bergi 的建议