ฉันเคยมีปัญหาที่คล้ายกันมากเมื่อหลายปีก่อนแล้วค้นพบว่าฉันสามารถทำได้
ALTER DATABASE database_name SET datestyle TO "ISO, MDY";
ลองดู (ใช้งานได้ตามฐานข้อมูลสำหรับโซลูชันสำหรับฐานข้อมูลทั้งหมดของคุณให้ตั้งค่าพารามิเตอร์นี้ในตัวคุณpostgresql.conf
- ขอบคุณ @a_horse_with_no_name)
โปรดทราบว่าการตั้งค่าเริ่มต้นคือไม่ได้เป็นอิสระที่เกิดเหตุ อย่างไรก็ตามหลังจากที่ชุดมันกับสิ่งที่มันต้องการคุณสามารถเปลี่ยนได้ด้วยตัวคุณเองในinitdb
postgresql.conf
ความคิดเห็นของ @ swasheck ทำให้ฉันทราบว่าด้วยการตั้งค่าของฉัน:
test=# SHOW lc_ctype;
lc_ctype
--------------------
Hungarian, Hungary
(1 row)
test=# SHOW lc_time;
lc_time
--------------------
Hungarian, Hungary
(1 row)
การตั้งค่าdatestyle
มีผลต่อไปนี้:
SET datestyle TO "ISO, MDY";
SELECT current_date;
date
------------
2012-06-21
(1 row)
ตอนนี้ไม่ได้คาดหวัง - และมันก็เหมือนกันบนเซิร์ฟเวอร์อื่นด้วยen_US.UTF8
เช่นกัน พยายาม"ISO, DMY"
แนะนำฉันด้วยเช่นกันว่า"ISO"
ส่วนนั้นมีส่วนสำคัญมากกว่าหรือน้อยกว่าเมื่อผลิตออกมา สำหรับค่าอินพุตมันมีผลตามที่คาดไว้ดังที่สรุปไว้ในตารางด้านล่าง:
input values
'2016/01/21' '01/21/2016' '21/01/2016' output
──────────────────────────────────────────────────────────────────────
ISO, YMD OK -- -- 2016-01-21
ISO, DMY -- OK -- 2016-01-21
ISO, MDY -- -- OK 2016-01-21
- หมายถึงข้างต้นว่ารูปแบบการป้อนข้อมูลที่กำหนดส่งผลให้เกิดข้อผิดพลาดสำหรับการdatestyle
ตั้งค่าที่กำหนด
เมื่ออ่านเอกสารอย่างละเอียดแล้วจะเห็นได้ว่าdatestyle
เป็นการตั้งค่าที่ขัดแย้งกันบางส่วน:
ด้วยเหตุผลทางประวัติศาสตร์ตัวแปรนี้มีสององค์ประกอบอิสระ: ข้อกำหนดรูปแบบเอาต์พุต (ISO, Postgres, SQL หรือเยอรมัน) และข้อกำหนดคุณสมบัติอินพุต / เอาต์พุตสำหรับการสั่งซื้อปี / เดือน / วัน (DMY, MDY หรือ YMD)
สำหรับฉันมันหมายความว่าเราต้องหาสิ่งที่เหมาะสมกับความต้องการของพวกเขาโดยการทดลอง แต่วิธีที่ดีที่สุดคือปล่อยไว้ที่ค่าเริ่มต้นและใช้รูปแบบอินพุตที่ไม่คลุมเครือเสมอ สองสิ่งเหล่านี้คือ'YYYY-MM-DD'
และ'YYYYMMDD'
. ฉันชอบคนรุ่นก่อน - แม้ใช้ IRL นี้)
หมายเหตุ: การdatestyle
ตั้งค่า (และการตั้งค่ารันไทม์อื่น ๆ ) จากpostgresql.conf
สามารถถูกแทนที่โดยการALTER DATABASE bla SET datestyle ...
ตั้งค่าอย่างถาวรสำหรับฐานข้อมูลเดียวหรือโดยSET datestyle TO ...
การตั้งค่าสำหรับเซสชันปัจจุบัน หลังนี้อาจมีประโยชน์เมื่อนำเข้าข้อมูลบุคคลที่สามด้วยรูปแบบวันที่ที่แตกต่างกัน