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 函数,我该如何使用它以及其余的插入值?
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
的默认值。