gpt4 book ai didi

sql - PL/pgSQL 中的 %% 是什么意思?

转载 作者:行者123 更新时间:2023-11-29 11:24:01 25 4
gpt4 key购买 nike

我正在阅读Instagrams sharding solution我注意到下面一行:

SELECT nextval('insta5.table_id_seq') %% 1024 INTO seq_id;

上面 SELECT 行中的 %% 有什么作用?我查阅了 PostgreSQL,我唯一发现的是当您想使用文字百分号字符时会使用 %%。

CREATE OR REPLACE FUNCTION insta5.next_id(OUT result bigint) AS $$
DECLARE
our_epoch bigint := 1314220021721;
seq_id bigint;
now_millis bigint;
shard_id int := 5;
BEGIN
SELECT nextval('insta5.table_id_seq') %% 1024 INTO seq_id;

SELECT FLOOR(EXTRACT(EPOCH FROM clock_timestamp()) * 1000) INTO now_millis;
result := (now_millis - our_epoch) << 23;
result := result | (shard_id << 10);
result := result | (seq_id);
END;
$$ LANGUAGE PLPGSQL;

最佳答案

我能想到的唯一地方是在format()里面函数,通常用于为动态 SQL 生成查询字符串。 Compare examples here on SO.

The manual :

In addition to the format specifiers described above, the specialsequence %% may be used to output a literal % character.

使用 modulo operator % 时很棘手在动态语句中!

我怀疑他们在幕后运行动态 SQL - 他们为本文概括和简化了这些 SQL。 (序列的模式限定名称是 'insta5.table_id_seq' 并且该表不会被命名为“table”。)在这个过程中,他们忘记了“取消转义”模运算符。
这就是他们实际运行的:

EXECUTE format($$SELECT nextval('%I') %% 1024$$, seq_name)
INTO seq_id;

关于sql - PL/pgSQL 中的 %% 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22865331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com