postgresql是什么意思?

时间:2020-11-03 13:14:57

标签: sql postgresql lateral

链接:https://www.2ndquadrant.com/wp-content/uploads/2019/05/sumtest.sql_.txt https://www.2ndquadrant.com/en/blog/join-lateral/

CREATE TABLE co_books (
    dd  numeric references books(dd),
    pname text references persons(pname),
    checked_out timestamptz,
    checked_in timestamptz);
Do $$
    DECLARE
    i int;
    afew int;
    p record;
    BEGIN
        FOR p IN SELECT pname FROM persons LOOP
            afew := (random() * 10)::integer;
            FOR i in 0..afew LOOP
                INSERT INTO co_books (dd, pname, checked_out) 
                VALUES 
                    ( (SELECT dd FROM books ORDER BY random() LIMIT 1), 
                         p.pname, /* hint: fix bad random data here */
                         (SELECT xtime FROM X2018 ORDER BY random() LIMIT 1)
                    );

            END LOOP;
        END LOOP;
    RETURN;
END;
$$;

如果单击链接,则可以清楚地看到表人pname列具有24个唯一行。 执行完代码块后,然后测试表co_books中有多少行。第一次是129行,然后我删除co_books,再次执行代码,该行是156行,第三次是154行。 因此,在这种情况下,我认为我听不懂以下部分。

FOR p IN SELECT pname FROM persons LOOP
            afew := (random() * 10)::integer;
            FOR i in 0..afew LOOP

1 个答案:

答案 0 :(得分:0)

random()返回一个介于0和1之间的随机双精度数字。

(random() * 10)::integer

是0到10之间的随机整数。

因此,循环将在INSERT上执行1到11条co_books语句之间的某个地方。

因此,每次运行代码时,表中的行数都会有所不同。