NULL을 반환한다. 기본적으로 상태 열은 각 order_id에 대해 1부터 시작하는 자동 증가 값입니다. 따라서 order_id 2에 이미 두 개의 행이있는 경우 시퀀스는 1과 2가되고 새 행의 경우 시퀀스는 3이어야합니다. 삽입 전에이 동작을 구현하기 위해 트리거를 사용하려고하지만 시도 할 때 새 order_id에 대한 첫 번째 행을 삽입하려면 (즉, 트리거는 삽입하기 전에 행을 변경하지 않아도됩니다.) PG에 오류가 발생합니다. 시퀀스에 NULL을 삽입 할 수 없다고 말합니다. 내 방아쇠 함수가 NULL을 반환하는 방법을 볼 수 없지만 내 pl/sql 정말 좋지 않아 그래서 뭔가 간단한 ... Trigger function below, thanks. max(sequence)
POSTGRESQL PL/pgSQL의 트리거 기능은 I이 같은 페이지 테이블이 삽입
DECLARE
seq_no INTEGER;
BEGIN
SELECT INTO seq_no MAX(sequence) FROM rar.order_status_history WHERE order_id = NEW.order_id;
IF FOUND THEN
NEW.sequence := seq_no + 1;
END IF;
RETURN NEW;
END;
새 ID를 얻기 위해'SELECT max()'를 사용하는 것은 매우 나쁜 생각입니다. 트랜잭션 안전이 아니므로 솔루션은 다중 사용자 환경에서 잘못된 일련 번호를 생성합니다. –
@a_horse_with_no_name, 좋은 지적은 이것을 달성하는 더 좋은 방법입니까? – Alpaus
해당 트랜잭션을 안전하게하려면 테이블을 독점적으로 잠 가야합니다. –