web-dev-qa-db-fra.com

Commande en incrémentation automatique pk garantit-elle l'ordre chronologique?

Est-il prudent de supposer que le commandant par un pk auto-incrémentant à Postgres commandera les enregistrements chronologiquement, d'un point de vue de la création? J'ai beaucoup dans de nombreuses relations, d'où je n'ai pas besoin de suivre autre chose, à l'exception de la relation elle-même et d'une forme d'ordre de création. J'essaie de décider si je dois incorporer une colonne d'horodatage pour cela, ou si je peux réutiliser la colonne PK d'incrémentation automatique existante à ce même objectif.

8
Lorenzo Peña

Qu'entendez-vous par l'ordre chronologique?

S'il y a une transaction 1 qui commence avant la transaction 2, mais se termine après la transaction 2, est la première transaction de transaction 1 ou transaction 2?

Si vous utilisez le niveau d'isolation SERIALIZABLE, il garantit qu'il existe une commande totale pour les transactions: c'est-à-dire qu'il existe une commande série (non parallèle) pour les transactions qui donneraient le même résultat que Les transactions fonctionnant dans votre système réel parallèle.

Très probablement, les séquences PostgreSQL ne donneront pas exactement la même commande de valeurs que la commande totale sérialisable. Vous pouvez résoudre ce problème en créant votre propre séquence: Créez une table avec une ligne avec une colonne entière et mettez à jour cette ligne. Cependant, si cela fait cela, la parallélysabilité de vos transactions souffre. Cela peut même souffrir d'une manière qui provoque l'échec de certaines transactions.

Une solution, telle que proposée par un commentaire, est des horodatages. Cependant, la commande horodatage n'est pas nécessairement la même que l'ordre de série qui donnerait les mêmes résultats.

(En tant que note latérale, vous devez être préparé pour des transactions échouées dans tous les cas. Deadlocks Cause des transactions échouées. Le niveau SERIALIZABLE _ Niveau d'isolement provoque encore plus de transactions échouées. La bonne façon est de disposer de la rétro-arrêt et de la réparation exponentielle. )

2
juhist