Deterministic functions

In a non-replication environment, the system functions in this topic are handled as non-deterministic and by value. However, in a replication environment, logic in the replication software renders them deterministic and, as a result, they are handled by SQL. This is necessary to keep nodes in a replication set synchronized.

For example, without the modification, if a statement called the CURRENT_TIMESTAMP function on the primary, the replica would not be aware of the statement until after the primary commits and would therefore have a different time stamp. The additional code for the CURRENT_TIMESTAMP function in the replication environment allows the replica to use the same time stamp as the primary. Using the primary's time stamp makes the CURRENT_TIMESTAMP function within the statement deterministic.

The following table lists system functions that are handled deterministically in a replication environment:
Table 1. Deterministic functions
Function name Return type Arguments
ADD_MONTHS DATE DATE INT4
ADD_MONTHS TIMESTAMP TIMESTAMP INT4
AGE INTERVAL DATE DATE
AGE INTERVAL TIMESTAMP TIMESTAMP
DATE_PART INT8 VARCHAR DATE
DATE_PART INT8 VARCHAR TIME
DATE_PART INT8 VARCHAR TIMESTAMP
DATE_PART INT8 VARCHAR INTERVAL
DATE_TRUNC TIMESTAMP VARCHAR TIMESTAMP
DATE_TRUNC INTERVAL VARCHAR INTERVAL
LAST_DAY DATE DATE
MONTHS_ BETWEEN NUMERIC TIMESTAMP TIMESTAMP
NEXT_DAY DATE DATE VARCHAR
NEXT_DAY TIMESTAMP TIMESTAMP VARCHAR
NOW TIMESTAMP  
NOW TIMESTAMP INT4
OVERLAPS BOOL TIME TIME TIME TIME
OVERLAPS BOOL TIME TIME TIME INTERVAL
OVERLAPS BOOL TIME INTERVAL TIME TIME
OVERLAPS BOOL TIME INTERVAL TIME INTERVAL
OVERLAPS BOOL TIMESTAMP TIMESTAMP TIMESTAMP TIMESTAMP
OVERLAPS BOOL TIMESTAMP TIMESTAMP TIMESTAMP INTERVAL
OVERLAPS BOOL TIMESTAMP INTERVAL TIMESTAMP TIMESTAMP
OVERLAPS BOOL TIMESTAMP INTERVAL TIMESTAMP INTERVAL
OVERLAPS BOOL TIMETZ TIMETZ TIMETZ TIMETZ
TIMESTAMP TIMESTAMP VARCHAR
TIMESTAMP TIMESTAMP DATE
TIMESTAMP TIMESTAMP DATE TIME
TIMESTAMP TIMESTAMP DATE TIMETZ
TIMETZ TIMETZ VARCHAR
TIMETZ TIMETZ TIMESTAMP
TIMETZ TIMETZ TIMETZ
TIMEZONE VARCHAR VARCHAR TIMESTAMP
TIMEZONE VARCHAR INTERVAL TIMESTAMP
TO_CHAR VARCHAR TIMESTAMP VARCHAR
TO_CHAR NVARCHAR TIMESTAMP NVARCHAR
TO_DATE DATE VARCHAR VARCHAR
TO_DATE DATE NVARCHAR NVARCHAR
TO_TIMESTAMP TIMESTAMP VARCHAR VARCHAR
TO_TIMESTAMP TIMESTAMP NVARCHAR NVARCHAR