PostgreSQL 其他
Postgres 在某些地方不同于 mysql,所有这里加以说明
RETURN_GENERATED_KEYS UUID
问题描述
- 数据的库的主键是类型是 UUID,当向数据库添加记录时,数据库会自动生成主键,如何获取生成的主键呢?
- ApiTable 会自动返回数据库主键的的这,只不过返回主键的有些特殊
- 我们保存一条记录测试一下
import org.junit.Test;
import com.jfinal.kit.Kv;
import com.litongjava.open.chat.config.DbConfig;
import com.litongjava.open.chat.constants.TableNames;
import com.litongjava.table.model.TableInput;
import com.litongjava.table.model.TableResult;
import com.litongjava.table.services.ApiTable;
import com.litongjava.tio.utils.environment.EnvUtils;
import com.litongjava.tio.utils.json.JsonUtils;
public class UserMessageService {
@Test
public void testSaveMessage() {
EnvUtils.load();
new DbConfig().config();
String textQuestion = "How are your";
String chatId = "4f0d2c67-aef5-44a6-bf25-19d58450f20c";
TableInput ti = TableInput.by("content", textQuestion).set("role", "user").set("session_id", chatId);
TableResult<Kv> ts = ApiTable.save(TableNames.rumi_message, ti);
System.out.println(JsonUtils.toJson(ts));
}
}
result
class java.util.UUID
a629ae36-100a-48f4-ad0a-3951c77ef42d
{"data":{"uuid":{"leastSignificantBits":"-5977902531978791891","mostSignificantBits":"-6473451442147800844"}},"code":1,"ok":true,"msg":null}
mostSignificantBits and leastSignificantBits 是什么意思
在 Java 等编程语言中,UUID(Universally Unique Identifier)通常表示为一个 128 位的值。UUID 包含两个部分:最显著位(most significant bits)和最不显著位(least significant bits),各占 64 位。你的例子中,这两个部分分别是:
mostSignificantBits
: 2165688298263563317leastSignificantBits
: -5614157302637544926
要从这两个值生成一个 UUID,你可以使用 UUID 类中的构造函数,具体代码如下:
import java.util.UUID;
public class UUIDExample {
public static void main(String[] args) {
long mostSignificantBits = 2165688298263563317L;
long leastSignificantBits = -5614157302637544926L;
UUID uuid = new UUID(mostSignificantBits, leastSignificantBits);
System.out.println("Generated UUID: " + uuid.toString());
}
}
在这个示例中,我们使用UUID
类的构造函数UUID(long mostSigBits, long leastSigBits)
来生成一个 UUID 对象,并将其转换为字符串形式。
UUID 类型
kv.set("id", kv.get("id").toString());
json 类型
读取
PGobject meta = kv.getAs("meta");
if(meta.isNull()) {
kv.set("meta","{}");
}else {
kv.set("meta",JsonUtils.parseObject(meta.getValue()));
}
jsonb 类型
PGobject meta = new PGobject();
try {
meta.setType("jsonb");
meta.setValue("{}");
} catch (SQLException e) {
e.printStackTrace();
}
embedding.set("meta", meta);
tsvector 类型
PGobject search_vector = new PGobject();
search_vector.setType("tsvector");
try {
search_vector.setValue("");
} catch (SQLException e1) {
e1.printStackTrace();
}
embedding.set("search_vector", search_vector);