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: 2165688298263563317
  • leastSignificantBits: -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 对象,并将其转换为字符串形式。

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);