기본적으로 PostgreSQL의 저장 가능한 최대 정밀도로 타임 스탬프 여기
은 마이크로가 있음을 보여 예입니다.
내가 신발을 신고했다면 타임 스탬프에 다른 기본값을 사용할 수 있습니다. current_timestamp 값은 현재 트랜잭션이 시작된 시간입니다. 얼마나 많은 행을 삽입하든 아무리 오래 걸리더라도 트랜잭션 실행 중에는 변경되지 않습니다. 이는 중복 된 기본 키 값으로 인해 INSERT 문이 실패 할 수 있음을 의미합니다. 대신 기본값으로
create table upsistema (
t timestamp without time zone primary key
default current_timestamp,
foo bigint
);
insert into upsistema (foo) values (42), (43), (44);
ERROR: duplicate key value violates unique constraint "upsistema_pkey"
해보십시오 clock_timestamp(). 이는 성공을 보장하지는 않지만 성공 가능성을 높입니다.
t foo
--
2014-11-19 19:17:23.369432 42
2014-11-19 19:17:23.36958 43
2014-11-19 19:17:23.369587 44
create table upsistema (
t timestamp without time zone primary key
default clock_timestamp(),
foo bigint
);
insert into upsistema (foo) values (42), (43), (44);
select * from upsistema;
절대적으로 성공을 보장 중 하나를 기본 키 제약 조건을 변경하거나 완전히 드롭합니다. 이것이 의미가 있는지 여부는 응용 프로그램에 따라 다르지만,
이 아닐 경우은 동일한 마이크로 초에 데이터를 기록하는 여러 클라이언트를 발견하게되어 놀랄 것입니다.
테이블에 timestamp without time zone
을 사용하지만 current_timestamp 및 clock_timestamp()는 timestamp with time zone
을 반환합니다. SQL 문을 실행하기 전에 세션의 표준 시간대를 UTC로 변경하는 것이 좋습니다.
set time zone 'UTC';
select ... ;
및
set time zone 'UTC';
insert ... ;
는 서버는 기본적으로 UTC를 사용하도록 설정하는 의미가있는 경우
, 당신은 'UTC'에 postgresql.conf의에서 시간대 매개 변수를 설정할 수 있습니다. 그런 다음 각 세션에서 시간대를 설정할 필요가 없습니다.
흠, 테스트 해봤는데 나에게 잘 돌아 간다. http://sqlfiddle.com/#!15/619a0/1 – krokodilko
_pg가 수백만 개의 레코드를 쓸 수 있다고 생각하지 않는다. 너는 농담이야.값이 싼 Intel i5 CPU를 사용하는 우분투 데스크탑 상자는 1 초당 1 백만 행을 임시 테이블에 0.4 초 이내에 가져옵니다. –
정말입니까? 20 바이트 (3 개의 필드로 충분)로 레코드를 작성하면 하드 디스크의 초당 20MB를 작성해야합니다. 그래서 IDK. 간단한 루프를 시도 : 함수를 만들거나 바꾸기 test() 반환 값 $ BODY $ DECLARE t timestamp; declare i bigint; BEGIN FOR i IN 1..1000000 LOOP 삽입 tst 값 (i); - 루프 내에서 1,2,3,4,5,6,7,8,9,10 값을 사용합니다. END LOOP; 끝; $ BODY $ LANGUAGE plpgsql VOLATILE 비용 100; 그것은 27 초를 필요로한다. 테이블 tst는 필드가 있습니다. 나는 한계가 프로세서 나 OS가 아닌 하드 디스크라고 생각한다. Soooo ... IDK – jurhas