sql - 명령어 - www enterprisedb com postgres




PostgreSQL에 행이 있는지 가장 빠른 검사 (5)

TRUE / FALSE 반환을 위해 EXISTS 키워드를 사용하십시오.

select exists(select 1 from contact where id=12)

테이블에 삽입해야하는 행이 있지만이 삽입은 항상 일괄 적으로 수행됩니다. 그래서 배치에있는 단일 행이 테이블에 있는지 확인하고 싶습니다. 그 이유는 그 행들이 모두 삽입되었다는 것을 알기 때문입니다.

그래서 그것의 기본 키 확인하지만,별로 중요하지 않아야합니다. 나는 count(*) 아마도 좋지 않기 때문에 단 한 줄만 검사하고 싶다.

PostgreSQL을 처음 접한 이래로 나는 알고있는 사람들에게 물어볼 것입니다.

내 일괄 처리에는 다음과 같은 구조의 행이 들어 있습니다.

userid | rightid | remaining_count

따라서 테이블에 제공된 userid 가있는 행이 있으면 해당 행이 모두 존재 함을 의미합니다.


performace에 대해 생각해 보면 다음과 같은 함수에서 "PERFORM"을 사용할 수 있습니다.

 PERFORM 1 FROM skytf.test_2 WHERE id=i LIMIT 1;
  IF FOUND THEN
      RAISE NOTICE ' found record id=%', i;  
  ELSE
      RAISE NOTICE ' not found record id=%', i;  
 END IF;

엄지 손가락의 규칙

선택이 존재합니다 (xx에서 xx를 선택하십시오). "1 + 1이 2를 더합니다.";


INSERT INTO target( userid, rightid, count )
  SELECT userid, rightid, count 
  FROM batch
  WHERE NOT EXISTS (
    SELECT * FROM target t2, batch b2
    WHERE t2.userid = b2.userid
    -- ... other keyfields ...
    )       
    ;

BTW : 복제본의 경우 전체 배치가 실패하도록하려면 (기본 키 제약 조건이 주어짐)

INSERT INTO target( userid, rightid, count )
SELECT userid, rightid, count 
FROM batch
    ;

당신이 원하는대로 정확하게 할 수 있습니다 : 성공하거나 실패합니다.


select true from tablename where condition limit 1;

Postgres가 외래 키 검사에 사용하는 쿼리라고 생각합니다.

귀하의 경우에는 한 번에 이렇게 할 수 있습니다.

insert into yourtable select $userid, $rightid, $count where not (select true from yourtable where userid = $userid limit 1);




postgresql