问题描述
- 根据 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 的建议