I have gems clickhouse 0.1.10, clickhouse-activerecord 0.5.14, pg 1.4.6 and rails 7.0.4.3. ClickHouse server version 23.4.2.11, postgresql server 15.3. My clickhouse table ddl:
create table default.tests
(
id UUID default generateUUIDv4(),
created_at DateTime64(6)
)
engine = MergeTree PARTITION BY toMonth(created_at) ORDER BY (id, created_at);
My model is Test. When i create record like:
Test.create
this produces sql query:
INSERT INTO tests (created_at) VALUES ('2023-06-10 08:41:57')
As you can see there is no precision (microseconds). I can define rails time db format like this:
Time::DATE_FORMATS[:db] = '%Y-%m-%d %H:%M:%S.%6N'
then if i create record this will produce correct result:
INSERT INTO tests (created_at) VALUES ('2023-06-10 08:41:57.123123')
But this broke my PostgreSQL models sql queries! For example if i have model PgTest and if i create record like this:
PgTest.create
this will produce incorrect precision sql query in my postgresql database (duplicate precision):
INSERT INTO pg_tests (created_at) VALUES ('2023-06-10 08:41:57.123123.123123')
Setting Time db format in callback around_create - not an option for me.
It was fixed in 0.5.15 version, last 0.6.0. For rails 7.1+ you need use branch rails_7
.