Commit d34d39ad authored by Adam Chainz's avatar Adam Chainz Committed by Tim Graham
Browse files

Fixed #24894 -- Added contrib.postgres.functions.TransactionNow

parent 3872a331
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
from django.db.models import DateTimeField
from django.db.models.functions import Func


class TransactionNow(Func):
    template = 'CURRENT_TIMESTAMP'

    def __init__(self, output_field=None, **extra):
        if output_field is None:
            output_field = DateTimeField()
        super(TransactionNow, self).__init__(output_field=output_field, **extra)
+31 −0
Original line number Diff line number Diff line
PostgreSQL specific database functions
======================================

All of these functions are available from the
``django.contrib.postgres.functions`` module.

.. currentmodule:: django.contrib.postgres.functions

TransactionNow
--------------

.. class:: TransactionNow()

.. versionadded:: 1.9

Returns the date and time on the database server that the current transaction
started. If you are not in a transaction it will return the date and time of
the current statement. This is a complement to
:class:`django.db.models.functions.Now`, which returns the date and time of the
current statement.

Note that only the outermost call to :func:`~django.db.transaction.atomic()`
sets up a transaction and thus sets the time that ``TransactionNow()`` will
return; nested calls create savepoints which do not affect the transaction
time.

Usage example::

    >>> from django.contrib.postgres.functions import TransactionNow
    >>> Article.objects.filter(published__lte=TransactionNow())
    [<Article: How to Django>]
+1 −0
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ Psycopg2 2.5 or higher is required.
    aggregates
    fields
    forms
    functions
    lookups
    operations
    validators
+9 −1
Original line number Diff line number Diff line
@@ -203,7 +203,8 @@ Now

.. versionadded:: 1.9

Returns the database server's current date and time when the query is executed.
Returns the database server's current date and time when the query is executed,
typically using the SQL ``CURRENT_TIMESTAMP``.

Usage example::

@@ -211,6 +212,13 @@ Usage example::
    >>> Article.objects.filter(published__lte=Now())
    [<Article: How to Django>]

.. admonition:: PostgreSQL considerations

    On PostgreSQL, the SQL ``CURRENT_TIMESTAMP`` returns the time that the
    current transaction started. Therefore for cross-database compatibility,
    ``Now()`` uses ``STATEMENT_TIMESTAMP`` instead. If you need the transaction
    timestamp, use :class:`django.contrib.postgres.functions.TransactionNow`.

Substr
------

+5 −0
Original line number Diff line number Diff line
@@ -141,13 +141,18 @@ Minor features

* Added support for the :lookup:`rangefield.contained_by` lookup for some built
  in fields which correspond to the range fields.

* Added :class:`~django.contrib.postgres.fields.JSONField`.

* Added :doc:`/ref/contrib/postgres/aggregates`.

* Fixed serialization of
  :class:`~django.contrib.postgres.fields.DateRangeField` and
  :class:`~django.contrib.postgres.fields.DateTimeRangeField`.

* Added the :class:`~django.contrib.postgres.functions.TransactionNow` database
  function.

:mod:`django.contrib.redirects`
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Loading