相关疑难解决方法(0)

在两个表中的触发器函数中选择

我在 x86_64-unknown-linux-gnu 上的 PostgreSQL 9.4.3 中的表和触发器,由 gcc (Debian 4.9.2-10) 4.9.2,64 位编译:

CREATE TABLE measurements (
        measurement_id SERIAL PRIMARY KEY NOT NULL,
        measurement_size_in_bytes INTEGER NOT NULL
    );    

CREATE TABLE file_headers (
        header_id SERIAL PRIMARY KEY NOT NULL, 
        measurement_id INTEGER NOT NULL, 
        file_header_index_start INTEGER,
        file_header_index_end INTEGER
    );

CREATE TRIGGER measurement_ids AFTER INSERT 
        ON measurements FOR EACH ROW 
        EXECUTE PROCEDURE ins_function('SELECT measurement_id FROM measurements 
        ORDER BY measurement_id desc limit 1;', 1, 666 ); 
Run Code Online (Sandbox Code Playgroud)

在那里我假设 SELECT 的数据类型自 SERIAL 以来是 INTEGER 但它显然是错误的,因为我从这个启动触发器的命令中收到错误消息:

INSERT INTO measurements …
Run Code Online (Sandbox Code Playgroud)

postgresql trigger datatypes plpgsql serialization

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

批量插入多个表

我有两个表可以执行一些批量插入:

  1. 密钥:key_id (pk), key_name
  2. related_key: related_key_id (pk), key_id (fk)

第一INSERT

values_data = "($$key_1$$), ($$key_2$$)"

INSERT INTO key (key_name) VALUES values_data
Run Code Online (Sandbox Code Playgroud)

INSERT

values_data = "(1, `the id of the first value inserted in key`)
             , (1, `the id of the sec value inserted in key`)"

INSERT INTO related_key (related_key_id, key_id) VALUES values_data
Run Code Online (Sandbox Code Playgroud)

我不知道如何做第二个,INSERT因为我不知道如何为插入到key表中的行获取这些 id 。

或者有没有更好的方法来做到这一点?

postgresql cte postgresql-9.3 bulk-insert

3
推荐指数
1
解决办法
3218
查看次数

在 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
查看次数