time、timestampおよびintervalは秒フィールドに保有されている小数点以下の桁数を指定する精度値pをオプションで受け付けます。 デフォルトでは、精度についての明示的な限界はありません。 pの許容範囲は0から6です。
Go でテストコードを書いていて、これに関連しそうなバグ?でハマった。
time.Time 型のデータを database/sql と lib/pq を使って PostgreSQL に INSERT し、その後 SELECT して構造体にマッピングしたものを reflect.DeepEqual で比較したり go-cmp の Diff で差分をとると、秒以下の桁数が異なっていて不一致となった(Go プログラム内で time.Now() で生成したものは9桁、 PostgreSQL から SELECT したものは6桁)
想像だが、 Go のレイヤーでは9桁(ナノ秒)の精度を持っているが PostgreSQL のレイヤーでは6桁(マイクロ秒)の精度しかなく、 PostgreSQL のレイヤーを一度通過することで6桁まで丸められてしまったのではないか。