2 votes

Type de données spécifique à la base de données Rails

C'est la première fois que j'essaie Rails avec PostgreSQL. Je suis confus par l'absence d'utilisation de timestamp with timezone dans le code que je vois habituellement concernant les colonnes stockant l'heure absolue. Un exemple parfait est devise, il stocke des colonnes dans une colonne datetime qui se traduit par un timestamp sans fuseau horaire dans PostgreSQL.

Je considère que c'est une mauvaise pratique car timestamp sans fuseau horaire pourrait signifier n'importe quel fuseau horaire. Si vous accédiez à la base de données depuis une autre application, vous n'auriez aucune idée à quel fuseau horaire la date et l'heure se réfèrent sans regarder Rails. Cela devient simplement un désordre décentralisé.

Y a-t-il un moyen pour moi de créer un timestamp avec fuseau horaire dans une migration/schema ActiveRecord pour PostgreSQL? Est-ce que cela posera des problèmes d'incompatibilité avec le code actuel du framework Rails?

Je comprends qu'ActiveRecord essaie d'être agnostique par rapport à la base de données, mais c'est juste une manie qui m'agace et que je ne peux pas ignorer.

2voto

Brandon Jernigan Points 461

Je suggère de jeter un coup d'œil à cette réponse (très bonne explication) : Ignorer complètement les fuseaux horaires dans Rails et PostgreSQL


MISE À JOUR

Conformément à la documentation d'ActiveRecord, au lien ci-dessus et à mes propres tests - j'ai conclu que les types de colonnes datetime et timestamp par défaut dans les migrations de schéma ne peuvent pas être modifiés pour forcer PostgreSQL à utiliser timestamp with time zone.

Documentation PostgreSQL :

Remarque : La norme SQL exige que l'écriture de timestamp soit équivalente à timestamp sans fuseau horaire, et PostgreSQL respecte ce comportement. (Les versions antérieures à 7.3 le traitaient comme timestamp avec fuseau horaire.) timestamptz est accepté comme une abréviation de timestamp with time zone ; ceci est une extension de PostgreSQL.

http://www.postgresql.org/docs/9.1/static/datatype-datetime.html

0voto

Nishutosh Sharma Points 1149

Nous pouvons utiliser ceci gem pour remplacer la configuration et utiliser des types de données spécifiques à l'Adaptateur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X