주요 변경 사항
모든 드라이버의 동작을 일관되게 맞추기 위해 Postgres 타임스탬프 매핑이 변경되었습니다.
❗ postgres.js 드라이버 인스턴스가 날짜를 항상 문자열로 반환하도록 수정했으며, Drizzle은 선택한 mode에 따라 문자열 또는 매핑된 날짜를 제공합니다. 발생할 수 있는 유일한 문제는 Drizzle 내부에 postgres.js 드라이버 인스턴스를 제공하면 해당 객체의 날짜 동작이 변경되어 항상 문자열이 된다는 점입니다.
이 변경 사항을 마이너 릴리스로 적용하면서 다음 사항을 알려드립니다:
-
타임스탬프를 사용하고 특정 응답을 기대하고 있었다면 동작이 변경됩니다. 드라이버에 매핑할 때 타임존이 있는 타임스탬프와 없는 타임스탬프 모두에 대해 항상
.toISOString을 사용합니다. -
Drizzle 외부에서
postgres.js드라이버를 사용하고 있었다면, Drizzle에 전달된 모든postgres.js클라이언트는 날짜에 대해 변경된 동작을 갖게 됩니다. 응답의 모든 날짜는 문자열이 됩니다.
postgres.js에서 변경된 파서입니다.
const transparentParser = (val: any) => val;
// Override postgres.js default date parsers: https://github.com/porsager/postgres/discussions/761
for (const type of ['1184', '1082', '1083', '1114']) {
client.options.parsers[type as any] = transparentParser;
client.options.serializers[type as any] = transparentParser;
}이상적으로는 거의 모든 다른 드라이버와 마찬가지로 쿼리별로 매핑을 변경할 수 있어야 하며, 이는 드라이버 클라이언트가 변경되지 않음을 의미합니다. postgres.js 라이브러리 제작자에게 쿼리별 매핑 인터셉터 지정 가능성에 대해 문의하여 모든 사용자를 위해 이 흐름을 더욱 개선할 예정입니다.
이 기능을 놓쳤고 이미 postgres.js에서 사용 가능한 경우 Discord에서 알려주세요!
타임존이 있는 타임스탬프와 없는 타임스탬프에 대한 추가 참조는 문서에서 확인할 수 있습니다.
postgres.js 드라이버와 Drizzle 시작하기 문서는 여기에서 확인하세요.
버그 수정
- mode string을 사용하는 timestamp가 문자열 대신 Date 객체로 반환되는 문제 - (#806)
- 날짜가 항상 날짜로 표시되는 문제 (#971)
- JavaScript에서 타임스탬프와 해당 datetime 객체를 사용할 때 발생하는 불일치 문제 (#1176)
- timestamp 컬럼이 문자열 타입으로 표시되지만 실제로는 Date 객체를 반환하는 문제 (#1185)
- postgres date 컬럼의 잘못된 데이터 타입 (#1407)
- PostgreSQL에서 TimeZone을 UTC로 설정했을 때 잘못된 타임스탬프 변환 (#1587)
- Postgres에서 타임존이 있는 timestamp에 삽입할 때 밀리초가 제거되는 문제 (#1061)
- timestamp 필드 업데이트 (AWS Data API 사용) (#1164)
- 관계형 쿼리에서 잘못된 날짜 반환 (#895)