小编sud*_*udo的帖子

我应该如何在 Postgres 中索引 UUID?

我是 PostgreSQL 的新手,一般来说对数据库有点陌生。我们应该如何在 Postgres 中索引UUID值,是否有既定的方法?我分为使用散列和使用特里树,除非已经有内置的东西可以自动使用。无论我使用什么,都将处理大量数据。

SP-GiST 运算符族“text_ops”使用树索引。因为 UUID 很长而且非常不同,所以即使我只会进行完整匹配搜索,这些听起来也很吸引人。

还有一个哈希选项。散列是 O(1),当然除了相等我不需要做任何比较,但是因为 UUID 很长,我担心从它们生成散列会浪费很多时间。

或者这是否过于依赖系统和使用细节?

在大多数情况下,我宁愿使用bigserial,但有人告诉我为此使用uuid。我们需要uuid,因为我们可能有多个服务器使用不同的数据库,因此不能保证我们将拥有唯一的 bigint。我们可以为每个服务器使用不同的序列(和种子),但它仍然不如 UUID 灵活。例如,如果不转换 ID 及其引用,我们将无法将数据库条目从一台服务器迁移到另一台服务器。

postgresql index uuid

39
推荐指数
2
解决办法
3万
查看次数

Postgres 9.5 中 Unicode 文本的一致性检查不一致?

使用 PostgreSQL 9.5。似乎 Postgres 与它比较类似于??. 一个唯一的约束是考虑一些相等的字符串,GROUP BY而这些字符串是不同的。

我有一个GROUP BYTEXT列上使用的选择查询和在其他一些列上使用的聚合函数以确保TEXT输出中列的唯一性,并且我将结果插入到具有主键(因此是唯一的)约束的表中这TEXT列。

看起来与此相似;为简单起见,我刚刚更改了表名:

 INSERT INTO mytable ( % mytable has string TEXT PRIMARY KEY, score INT
            SELECT 
            sq1.string string, sq2.score / sq1.score
            FROM
            (
                SELECT n.string string, SUM(n.score) score
                FROM
                othertable1 n % has string TEXT (non-unique) and score INT
                GROUP BY string
            ) sq1,
            (
                SELECT n.string string, SUM(n.score) score
                FROM
                othertable2 n % has string TEXT (non-unique) and score …
Run Code Online (Sandbox Code Playgroud)

postgresql unique-constraint unicode

6
推荐指数
0
解决办法
564
查看次数

在 PostgreSQL 中获取下一个 bigserial 值

假设我有一个带id BIGSERIAL列的表。我刚刚开始了一个新的会话。我想知道id我插入的下一行是什么。我怎么能说这个?

我不能简单地SELECT MAX(id) FROM my_table(如果没有找到就返回 1),因为如果我之前删除了东西,下一个id不会是 1,而是会更高。

我已经看过其他使用currval()和的答案nextval()。除非我在当前会话中插入,否则它们不起作用......而且我不想插入一行并查看我得到的 ID,哈哈。

我将要锁定表并在客户端上从 Python 脚本插入大量行,该脚本也在字典中跟踪行 ID。行 ID 必须匹配,所以我需要知道第一个是什么。我很惊讶没有其他人正在处理这种情况。

编辑:除非我在当前会话中插入,否则我对这些功能不起作用的看法是错误的,但请参阅下面的评论。

postgresql sequence

2
推荐指数
1
解决办法
2042
查看次数

使用整数或浮点数作为值创建多键 JSON 对象

我有一个文本表和双精度类型。从中,我想构建一个如下所示的 JSON 对象:({"a": 1.0, "b": 1.2, "c": 3.4}编辑:澄清一下,键是表中的文本列,值是双精度列)。请注意,值周围没有引号,因为它们是浮点数,而不是 JSON 标准支持的字符串。

使用 Postgres 9.5。有一个json_build_object函数需要两个并行的文本数组并构建一个带有文本键和文本值的 JSON 对象......也适用于 NULL 值,null在 JSON 中将它们转换为(无引号)。所以我会得到{"a": "1.0", "b": "1.2", "c": "3.4"}。但是如果我想要整数或浮点值怎么办?它不会采用任何数字类型数组。

我现在通过创建自己的函数在 Python 中处理它来解决这个问题!有没有办法在不定义新函数的情况下做到这一点?

CREATE OR REPLACE FUNCTION json_build_object_float_values(keys TEXT[], vals DOUBLE PRECISION[]) RETURNS JSONB AS
$$
    assert len(keys) == len(vals)
    import json
    d = {}
    for i in range(len(keys)):
        d[keys[i]] = float(vals[i])
    return json.dumps(d)
$$
LANGUAGE 'plpython3u' IMMUTABLE;
Run Code Online (Sandbox Code Playgroud)

(请注意,如果您使用它,它会返回 JSONB,但您可以将其更改为 JSON)

编辑,这里是测试输入和预期输出:

CREATE TABLE test (str text, num …
Run Code Online (Sandbox Code Playgroud)

postgresql json

2
推荐指数
1
解决办法
2197
查看次数

标签 统计

postgresql ×4

index ×1

json ×1

sequence ×1

unicode ×1

unique-constraint ×1

uuid ×1