Postgres PL/Python 正在初始化记录函数

Postgres PL/Python Initializing record functions

有没有一种方法可以传递到被调用以提供默认值的 PL 函数,我该如何使用它以及其余的插入值?

CREATE TABLE tokensStore (
    id SERIAL PRIMARY KEY,
    users INTEGER REFERENCES users(id),
    genDate timestamp with time zone NOT NULL DEFAULT now(),
    expDate timestamp with time zone NOT NULL DEFAULT now() + interval '24 hours', 
    token char(30) NOT NULL DEFAULT tokenGenerator(%%%INSERTED VALUES%%%)   
);

而且我不确定这是执行此操作的正确方法,我不知道我是否应该允许 NULL 值并创建一个触发器来生成令牌的值。

问题是我不想在该列中允许空值。 而且我还想制作带有返回值标记的插入,例如

INSERT tokensStore(user) VALUES (1) RETURNING token; 

如果有人对此有很好的参考,我们将不胜感激。

您需要一个 plpython 触发器:

create or replace function before_insert_on_tokensstore()
returns trigger language plpython3u as $$

    id = TD["new"]["id"]
    users = TD["new"]["users"]
    TD["new"]["token"] = users * 100 + id

    # 
    # TD["new"]["token"] = generate_token(users, id)
    #
    return "MODIFY"

$$;

create trigger before_insert_on_tokensstore
before insert on tokensstore
for each row execute procedure before_insert_on_tokensstore();

示例用法:

insert into tokensstore(users) 
values (1) 
returning token; 

             token              
--------------------------------
 101                           
(1 row)

INSERT 0 1  

当然,使用触发器您不需要 token 的默认值。

了解 PL/Python Trigger Functions.