Postgresql 在Clojure中使用PGobject

Postgresql 在Clojure中使用PGobject,postgresql,clojure,Postgresql,Clojure,我正在使用Clojure、YeSQL和Postgres 我有一个简单的postgres表,如下所示: CREATE TABLE foo ( id SERIAL PRIMARY KEY, num INT NOT NULL DEFAULT 1, txt TEXT NOT NULL ); SELECT (id, num, txt) FROM foo WHERE id = :id 我在一个文件中有一个查询,如下所示: CREATE TABLE foo ( id SERIAL PRIM

我正在使用Clojure、YeSQL和Postgres

我有一个简单的postgres表,如下所示:

CREATE TABLE foo (
  id SERIAL PRIMARY KEY,
  num INT NOT NULL DEFAULT 1,
  txt TEXT NOT NULL
);
SELECT (id, num, txt) FROM foo WHERE id = :id
我在一个文件中有一个查询,如下所示:

CREATE TABLE foo (
  id SERIAL PRIMARY KEY,
  num INT NOT NULL DEFAULT 1,
  txt TEXT NOT NULL
);
SELECT (id, num, txt) FROM foo WHERE id = :id
我预加载数据库:

INSERT INTO foo (num, txt) VALUES (5, 'potato');
当我通过yesql加载查询并在repl中运行它时,我得到以下结果:

=> (yesql/defquery get-record "foo.sql")
nil
=> (def rec (get-record 1))
({:row #<PGobject (1,5,"potato")>})
但是我刚刚得到了PGobject的东西,我不知道如何从中获取数据。是否有一些可用的方法可以让我获取,例如,num或txt,比如
(:num rec)
(这是我所期望的)


即使我能想出如何将PGobject转换成我认识的clojure数据类型,我也会很高兴。帮助?

好的,我知道了。问题是我查询中的分组。我的查询使用:

SELECT (id, num, txt) FROM foo WHERE id = :id
将结果分组为parenthases。这会导致Postgres JDBC驱动程序将结果作为分组集返回,而JDBC驱动程序并不十分理解这种数据类型

相反,我应该使用:

SELECT id, num, txt FROM foo WHERE id = :id
在这种情况下,我得到的不是
({:row#})
(第一次查询的结果),而是一个更好的
({:id 1,:num 5,:txt“potato”})

相关信息最终来自这个网站;特别是其中的一节:

这允许客户机代码为PostgreSQL的一个或多个应用程序添加处理程序 唯一的数据类型。通常,驱动程序不知道的数据类型是 由ResultSet.getObject()作为PGobject实例返回。这种方法 允许您编写扩展PGobject的类,并告诉驱动程序 要使用的类型名和类名。这件事的缺点是什么 每次建立连接时都必须调用此方法