Knex: ํƒ€์ž„์Šคํƒฌํ”„ ํŒŒ์‹ฑ์„ ์„ ํƒ ํ•ด์ œํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2016๋…„ 03์›” 16์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: knex/knex

์ •๋ฐ€๋„๊ฐ€ ์ค‘์š”ํ•œ ๋“œ๋ฌธ ๊ฒฝ์šฐ์— ์‹œ๊ฐ„ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์„ ํƒ ํ•ด์ œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋ณตํ•ฉ ๊ณ ์œ  ํ‚ค (user_id, created_at) ์—์„œ timestamptz๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ณ„์—ด ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ javascript๊ฐ€ created_at ํ•„๋“œ๋ฅผ ๋ฐ€๋ฆฌ์ดˆ๋กœ ์ž๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํŽ˜์ด์ง€ ๋งค๊น€์„ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋™์ผํ•œ ๋ฐ€๋ฆฌ์ดˆ ๋‚ด์— ๋‘ ๊ฐœ์˜ ํ•„๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ค‘๋ณต๋ฉ๋‹ˆ๋‹ค.

-- record --
id: 'c2ed61d5-ffab-4b0e-a957-c184b3f33132',
created_at: '2016-02-02 15:46:17.681601-05'

                           precise ^

knex ์ฟผ๋ฆฌ ์‚ฌ์šฉ:

knex("series").where("created_at", ">", last.created_at).toString()
select * from series
where created_at > '2016-02-02T15:46:17.681-05:00'

                               truncated ^
discussion question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@aj0strow DB์—์„œ ํ–‰์„ ์ฝ์„ ๋•Œ knex ๊ฐ€ timestamp ๋ฅผ Javascript Date ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์œผ์‹ญ๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๋‹น ๊ตฌ๋ฌธ ๋ถ„์„์€ pg ๋“œ๋ผ์ด๋ฒ„์— ์˜ํ•ด ์ตœ์†Œํ•œ PostgreSQL์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํ˜•์„ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋„๋ก ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var pgTypes = require('pg').types;
// Don't parse dates to js Date() objects
pgTypes.setTypeParser(1082, 'text');
// Don't parse timestamps to js Date() objects
pgTypes.setTypeParser(1184, 'text');

text ๋งค๊ฐœ๋ณ€์ˆ˜ ๋Œ€์‹  ๋“œ๋ผ์ด๋ฒ„์— ๊ณ ์œ ํ•œ ํŒŒ์„œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

ํƒ€์ž„์Šคํƒฌํ”„ ๊ตฌ๋ฌธ ๋ถ„์„์„ ์„ ํƒ ํ•ด์ œํ•˜๋Š” ๊ฒƒ์€ ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž ์ •์˜ ๊ฐ€๋Šฅํ•œ 'parseTime' ๊ธฐ๋Šฅ ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ท€ํ•˜์˜ ๊ตฌ์ฒด์ ์ธ ์‚ฌ๋ก€์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ปดํ“จํ„ฐ ์‹œ๊ณ„์˜ ์„ธ๋ถ„์„ฑ์—๋Š” ์ œํ•œ์ด ์žˆ์œผ๋ฏ€๋กœ ๊ณ ์œ ํ•œ created_at ๊ฐ’์„ ์š”๊ตฌํ•ด๋„ ํ™•์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@aj0strow DB์—์„œ ํ–‰์„ ์ฝ์„ ๋•Œ knex ๊ฐ€ timestamp ๋ฅผ Javascript Date ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ถ์œผ์‹ญ๋‹ˆ๊นŒ?

๊ทธ๋ ‡๋‹ค๋ฉด ํ•ด๋‹น ๊ตฌ๋ฌธ ๋ถ„์„์€ pg ๋“œ๋ผ์ด๋ฒ„์— ์˜ํ•ด ์ตœ์†Œํ•œ PostgreSQL์— ๋Œ€ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์œ ํ˜•์„ ๋‹ค๋ฅด๊ฒŒ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋„๋ก ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var pgTypes = require('pg').types;
// Don't parse dates to js Date() objects
pgTypes.setTypeParser(1082, 'text');
// Don't parse timestamps to js Date() objects
pgTypes.setTypeParser(1184, 'text');

text ๋งค๊ฐœ๋ณ€์ˆ˜ ๋Œ€์‹  ๋“œ๋ผ์ด๋ฒ„์— ๊ณ ์œ ํ•œ ํŒŒ์„œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

@rhys-vdw ์‚ฌ์šฉ์ž + ์‹œ๊ฐ„์— ๊ณ ์œ ํ•˜๋ฏ€๋กœ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@elhigu ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๊ทธ๊ฒƒ์ด ๋ฐ”๋กœ ๋‚ด๊ฐ€ ์ฐพ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ์—์„œ ::text ๋กœ ์บ์ŠคํŒ…ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ์‰ฌ์šฐ๋ฏ€๋กœ ํ•„์š”ํ•  ๋•Œ ๊ตฌ๋ฌธ ๋ถ„์„์„ ๋„๊ณ  new Date ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๋‹ค์‹œ ํ•œ๋ฒˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰