2016-12-27 6 views
0

포스트 그레스 규칙 (https://www.postgresql.org/docs/current/static/sql-createrule.html)에서 변수를 사용할 수 있습니까? 내가 두 번째 INSERT에서 사용할 수 있도록 예를 들어, 규칙에 내가 할 경우포스트그레스 규칙에서 변수 사용

CREATE RULE "_RETURN" AS 
    ON INSERT TO t1 
    DO INSTEAD 
     INSERT INTO t1 (id, a) VALUES (uuid_generate_v4(), new.a) 
     INSERT INTO t4 (id) VALUES (??????) 

은 어떻게 든 변수로 첫 번째 INSERT에 uuid_generate_v4()의 값을 설정할 수 있습니까? 또는 첫 번째 INSERT에서 생성 ID를 얻을 수있는 방법이 있나요? 그래서 두 번째에서 사용할 수 있습니까?

또한 오류가 발생합니다. infinite recursion detected in rules for relation. 아마도 테이블 t1에 대한 규칙이지만 t1에 삽입 할 명령문을 포함하기 때문일 수 있습니다. 이 작품을 어떻게 만들 수 있습니까?

+0

나는 [CTE] (https://www.postgresql.org/docs/9.1/static/queries-with.html)를 사용하여 uuid 값을 선택하고 삽입시이를 참조 할 수 있다고 생각한다. 아마 다른 방법이있을지라도. 또한 재귀는't1'에 삽입 할 때마다 규칙을 다시 생성하는 't1'에 삽입을 수행하는 규칙을 생성한다는 사실에서 비롯된 것입니다. 따로 – jcern

답변

0

또한 관계에 대한 규칙에서 무한 재귀가 감지되었습니다. 아마도 규칙은 테이블 t1에 대한 것이기 때문에, t1에 삽입 할 문장은 입니다. 어떻게이 작업을 할 수 있습니까?

작동하지 않습니다.
참조 문서 : 규칙 작업에서 발생 39.4. Rules on INSERT, UPDATE, and DELETE

쿼리 나무는 다시 재 작성 시스템에 던져, 그리고 어쩌면 더 규칙 더 많거나 적은 쿼리 나무의 결과로 적용받을. 따라서 규칙의 동작에는 다른 명령 유형 또는 규칙 자체가 켜져있는 것과 다른 결과 관계가 있어야합니다. 그렇지 않으면이 재귀 적 프로세스가 무한 루프로 끝납니다. (규칙의 재귀 확장이 감지 는 오류로보고됩니다.) 즉

, 규칙 ON INSERT TO t1 같은 테이블 t1 또 다른 insert을 발사 할 수에서, 때문에 그이 원인 규칙이 반복적으로 반복적으로 실행됩니다. 그러면 오류가 발생합니다.

이 작업을 수행하려면 트리거를 사용해야합니다.

+0

규칙 재귀 T1 INTO 라인 INSERT이 (ID는 a) VALUES (uuid_generate_v4() new.a) 가 T1 INTO INSERT이어야 (ID, a) VALUES (uuid_generate_v4() new.a) 반환 번호 uuid_generate_v4 값을 가져 오려면 –