ADDED
TIMESTAMP WITH TIME ZONE
to DATE
TIMESTAMP WITHOUT TIME ZONE
to TIME WITHOUT TIME ZONE
DATE
and TIME
to TEXT
INSERT INTO
with SELECT
on tables with array columnsMAKE_TIME()
, CURRENT_TIMESTAMP()
, MAKE_DATE()
, DATE()
, MAKE_TIMESTAMP()
, MAKE_INTERVAL()
and MAKE_TIMESTAMPTZ()
functionsDoy
(day of year), Dow
(day of week), Epoch
(sec since 1970-01-01), Quarter
(quarter of the year)EXTRACT()
functionoxla_internal.oxla_role
now contains an additional user_kind
column. In case of already existing home, a migration will add this column automatically if necessaryCHANGED
INTERVALs
by numbers use a marginally slower, but more accurate mode of calculation. Previous (faster, but less accurate) behaviour can be switched on with an optional runtime flagCOPY
statement executionREMOVED
fast_commit.enable_migration flag
. After this change, if home’s version comes from the time before Fast Commit feature release, the migration to the most recent version of home will always be doneCREATE TYPE
, DROP TYPE
, and ALTER TYPE
statements got disabledpg_type
now contains only built-in typesFIXED
COUNT(*)
aggregationsORDER BY
incorrect sorting of INTERVAL
values (ex. placing 31 days
before 1 month
)INTERVAL
values to return incorrect results for equivalent values (e.g. 30 days
= 1 month
would return false)INTERVALs' >= operator
to return potentially incorrect results for all values other than the last fewRANGE
frames when ordering by an INTERVAL
columnINTERVAL
columns to order values incorrectlyJOIN
ing tables with equivalent INTERVAL
values (ex. 30 days
!= 1 month
)LIMIT/OFFSET NULL
would crash OxlaCURRENT_TIMESTAMP()
function behaviour not returning timestamp with timezoneGROUP BY
queries to return incorrect results or crash the serverNULL
literal casting and negationTIME
or DATE
could be erroneously optimised outMIN()
and MAX()
functions behaviour for the following type of queries: SELECT MIN(x) FROM y
NULL
literal (ex. -NULL::INT4
)WHERE … IN (…)
clausesCOMPATIBILITY ISSUES
INTERVAL
support in this release breaks the backwards compatibility for this feature, and will lead to possible loss of data for tables indexed over INTERVAL
columnsADDED
CEILING
alias for CEIL()
functionPI()
functionFIXED
unix_micros
/ millis
/ seconds
functionsINTERVAL
typesUPDATE
and DELETE
mutations to consume too much RAMCOUNT(*)
function, causing them to fail to plan with message about them not being a groupby keyCOUNT(*)
in WHERE
clausesADDED
MIN
, MAX
, CUME_DIST
, NTILE
, BOOL_OR
and BOOL_AND
(in ROWS
mode) window functionsRANGE
mode for window functionsMODE
, PERCENTILE_CONT
and PERCENTILE_DISC
ordered-set aggregate functionsCORR
, COVAR_POP
, COVAR_SAMP
, REGR_AVGX
, REGR_AVGY
, REGR_COUNT
, REGR_INTERCEPT
, REGR_R2
, REGR_SLOPE
, REGR_SXX
, REGR_SXY
, REGR_SYY
, STDDEV
, STDDEV_POP
, STDDEV_SAMP
, VARIANCE
, VAR_POP
, VAR_SAMP
FIXED
AVG
function would return a division by zero
error if the denominator contained a NULL
valueNULL
value by 0 to return error, instead of NULL
SELECT
statements would not resolve DISTINCT
aggregations correctlyDROP USER IF EXISTS
/ DROP ROLE IF EXISTS
. Previously, it was equivalent to DROP USER
out of memory
error in cases when it used to crashDATE_TRUNC
function on nullable dataNULL
valuesSELECT
statementsWITH
clausesADDED
TEXT
type to any other simple typeregexp_match()
functionFIXED
INSERT INTO
statementSELECT
statements, which caused either returning incorrect results or failing to plan for certain queriesADDED
information_schema
, pg_catalog
and system
schemas. Users can now see all objects listed in these tables, when they have grants to a given object or parent schemaON_ERROR
parameter for COPY FROM
operations on CSV files. From now on, users can ignore invalid rows and keep the correct ones in the tableCOPY FROM
operations utilizing ORC and Parquet formats allow for converting numeric types into timestamp or dateCHANGED
COPY FROM
operations utilizing ORC and Parquet formats have more meaningful errorsFIXED
JOIN
clauseSELECT
statementsADDED
COPY FROM
statements now support Parquet formatARRAY
data typeto_char(interval, string)
functionACCESS_CONTROL__INITIAL_PASSWORD
config variable (doesn’t need to be present in subsequent Oxla starts)WINDOW
and OVER
clauses syntaxCOUNT()
, DENSE_RANK()
, LAG()
, LEAD()
, PERCENT_RANK()
, RANK()
, ROW_NUMBER()
, SUM()
functionsROWS
frame mode (no support for GROUPS
and RANG
E frame modes yet)CHANGED
COPY FROM
statements from S3 for smaller .orc
files (~1GB)information_schema.role_table_grants
returns only real privileges that the superuser has on tablesDEPRECATED
leader_election.leader_name
config variable)forced_revoke_timeout
, min_election_timeout
and max_election_timeout
FIXED
SELECT
sub-query expression contained table expressions (e.g. GROUP BY
)SELECT
statements when one of them includes COUNT(*) FROM table
LIMIT
and OFFSET
in JOIN
and UNION
statementsGROUP BY
queries using nested queries with ORDER BY
keyword and LIMIT
clauseSELECT
statements with common subexpression optimisation resulting in data being overriden by other expression for particular cases utilizing JOIN
clausesTIMESTAMPTZ
to the EXTRACT()
functionJOIN ON
clauseADDED
DROP USER
syntaxpg_authid
, pg_shadow
, pg_roles
and pg_user
tablesDISTINCT
support in aggregation functionsFETCH NEXT N ROWS ONLY
syntax as a syntactic sugar for LIMIT
CHANGED
16.0
FIXED
COPY table(columns) FROM
no longer leads to error-related null constraintCOPY FROM
statements for ORC format. Files that contained null values, used to sporadically insert them in cells instead of the valueUPDATE
on indexed tables used to lead to data lossCOMPATIBILITY ISSUES
max_mem_count
increasing the memory map areas, in the following way: sysctl -w vm.max_map_count=262144
ADDED
WITH
statementspg_catalog.pg_auth_members
information_schema.role_usage_grants
information_schema.role_table_grants
network.slots_port
config option, that configures TCP port used for data exchange between nodes during query execution (defaults to 5770
)CHANGED
network.port
) and one for data exchange (network.slots_port
)/
and .
date separators are accepted in timestampsCOPY FROM
for an ORC format is now multithreaded, which comes with speed improvementsCOPY FROM
for an ORC format allows for skipping trailing nullable columnsLIMIT
clause, for cases in which query can end before scanning all inputFIXED
ADDED
INT4
and INT8
type aliasesSUM()
functionINSERT
statementsCOPY FROM
statement with ORC filesVERSION
functionINSERT
statementsCHANGED
oxla_internal.oxla_home_files
paths are relative to Oxla home locationRESULT
is no longer a keywordROUND()
behavior is aligned with PostgreSQL, so it rounds to the nearest even numberSELECT
statement contains multiple ORDER BY
, LIMIT
and OFFSET
clausesFIXED
DROP TABLE
in write-protected namespaces. For example DROP TABLE pg_catalog.pg_class
used to crash Oxla, while now it returns permission denied for schema pg_catalog
GROUP BY
was used internally during execution of a queryJOIN
used to fail in Oxla Planner'
or ;
in comments no longer results in syntax errorADDED
YEAR
, MONTH
, DAY
, HOUR
, MINUTE
, SECOND
YEAR TO MONTH
, DAY TO HOUR
, DAY TO MINUTE
, DAY TO SECOND
, HOUR TO MINUTE
, HOUR TO SECOND
, MINUTE TO SECOND
SELECT INTERVAL '1' HOUR
-> 01:00:00SELECT INTERVAL '1 YEAR 2 MONTH' YEAR
-> 1 yearSELECT INTERVAL '1-2 3 day 04:05:06.070809' DAY TO HOUR
-> 1 year 2 months 3 days 04:00:00oxla_db_event_journal_size
Prometheus metric to probe OXLA events journal sizeSIGN()
mathematical functionCHANGED
COPY
syntax:
CSV
is accepted as an import option without FORMAT
preceding itHEADER
without any other specification is treated as HEADER ON
WITH
is supported without parenthesisDELIMITER
and NULL
import options can be followed by AS
SELECT INTERVAL '2-1'
-> 2 years 1 month
y
, yr
, yrs
d
h
, hr
, hrs
min
, mins
, m
s
, sec
, secs
ms
1 week
, 2 weeks
INSERT INTO information_schema.tables
used to return relation "tables" does not exist
error, while now it returns relation "information_schema.tables" does not exist or is not user table
INSERT INTO pg_catalog.pg_attrdef values...
used to result in relation, pg_catalog.pg_attrdef does not exist or is not user table error
, while now it returns permission denied for table pg_catalog.pg_attrdef
/oxla/data
, /oxla/logs
and /oxla/crash
directories to oxla:oxla
FIXED
InvalidPart Message: One or more of the specified parts could not be found
error when copying data from CSVDELETE/UPDATE
statements would incorrectly return other modification of table is in progress
when restarting OxlaADDED
timestamptz
and interval
interval
and timestamptz
timestamptz
and interval
MIN
and MAX
functions for text columnsnetwork.postgresql_keepalive.*
configurationoxla_net_postgres_nonlocalhost_connections_count
- number of active non-localhost connectionsoxla_net_postgres_last_nonlocalhost_connection
- timestamp of last non-localhost connection event [seconds]oxla_net_postgres_last_nonlocalhost_disconnection
- timestamp of last non-localhost disconnection event [seconds]oxla_net_postgres_last_query_started
- timestamp of last client query started event [seconds]oxla_net_postgres_last_query_finished
- timestamp of last client query finished event [seconds]oxla_net_postgres_queries_ongoing
- number of currently running client queriesOXLA_LOG_FILE
environment variable. It redirects Oxla process logs to a given file inside the containerOXLA_HOME
SELECT 1.1e+3
ORDER BY
keyword for timestampz
CHANGED
OXLA_HOME
; for existing OXLA_HOME
, OIDs will be assigned as beforefile_name
column from oxla_home_files
IF NOT EXISTS
for CREATE TABLE
and CREATE SCHEMA
IF EXISTS
for DROP SCHEMA
COPY TO
CSV file will now terminate each row with Unix-style newline (“\n”) instead of Windows/MS-DOS carriage return/newline (“\r\n”)FIXED
SELECT *
inside UNION
clauseCOMPATIBILITY ISSUES
ADDED
LIKE
operatorreceipts_received_total
metricsCHANGED
select '2024-5-13'::date
used to return 2024-5-13
, from now on it will return 2024-05-13
REMOVED
task_capacity_total
metricFIXED
regex_replace
will work similar as in PostgreSQL, replacing all occurrences only with ‘g’ flag (otherwise replacing only one)ADDED
LIKE
operatorGROUP BY
when at least one of the key columns has TEXT typepgbouncer
when debug flag is addedTRUNCATE
tableTimeZone
and integer_datetimes
. This is needed for compatibility with some external toolsCHANGED
FIXED
INSERT
, UPDATE
and DELETE
queries in rapid successionUNION
, INTERSECT
or EXCEPT
LEFT
and FULL JOIN
returning wrong results on multiple nodes in some situationsCOUNT
function without any parameters caused a crashregexp_replace
worked incorrectly. For example select regexp_replace
(‘123x’, ’(\d+)’, ‘abc’) returned abcabcx, now it correctly returns abcxADDED
pg_table_is_publishable
function was added, takes regclass
as parameter (table oid or name) and returns whether relation is publishable. Oxla doesn’t support publishing hence it always returns false
TIME
and JSON
types in IN
expressionspg_table_size
function takes one parameter which is table regclass and returns it’s sizeQuote_Ident
function mimicking Quote_Ident from postgresPOSITION(str IN substr)
, that works the same as STRPOS
LF
and CRLF
as line breakpg_catalog.pg_proc
tablepg_catalog.pg_get_constraintdef
although descriptions are not supported by Oxla, so it always returns nullpg_table_is_visible
function now also returning whether index associated to given oid is visible within current search_pathformat_type
. It works similar as in Postgres (but only for data types supported in Oxla)pg_table_is_visible
function returning whether table associated to given oid is visible within current search_pathshobj_description
and col_description
added. They always return null, as Oxla does not support “comment on”pg_policy
, pg_statistic_ext
, pg_publication
, pg_publication_rel
, pg_publication_namespace
, pg_inherits
pg_get_userbyid
function returning username associated to given oidpg_index
and pg_class
metatables) will be different for each new index. Previously it was always 0 (and it will remain 0 for indices created on older oxla version)set datestyle = 'ISO, MDY';
is supported (or simply ‘ISO’), but does nothing as ISO, MDY is default value. This is required by some connectors/toolsCHANGED
GROUP BY
columns if they are neutral for aggregation (e. g. changes A + 4 into A)SUM(A + k)
into SUM(A) + k * COUNT(*)
ORDER BY col LIMIT BY ...
where col is a scalar column (integer
, floating point
, boolean
or string
)SUM
operation in aggregation over whole table over INTEGER
, LONG
, FLOAT
, DOUBLE
non nullable columnsMIN
, MAX
operation in aggregation over whole table over INTEGER
, FLOAT
, DOUBLE
non nullable columnsINTEGER
and LONG
types with literal (e. g. my_col <> 53
)WHERE
and JOIN
operationspg_catalog.pg_type
, so they match the ones in Postgres. This change applies only to how type names are shown in pg_type
(Oxla handles types exactly the same as before). Changed names: integer -> int4, real -> float4, boolean -> bool, bigint -> int8, double precision -> float8, timestamp without time zone -> timestamp, timestamp with time zone -> timestamptz, time without time zone -> timeFIXED
pg_total_relation_size
crashing Oxla when provided with invalid literal oidSTRPOS
function is workinglength(<const value>)
function would failADDED
memory.max
and memory.non_query_max
configurationinformation_schema.columns
, which contain information about all columns in user namespacespg_language
tableto_char function
converting timestamp/timestamptz to string using given format stringADDED
information_schema.referential_constraints
table for tools integration purposesto_char
function to convert the number to string using the given format stringto_timestamp
function to convert the string to timestamp using given format stringinterval date_trunc
function working like Postgres date_trunc
pg_catalog.has_database_privilege()
functionpg_enum
, pg_range
, information_schema.character_sets
pg_encoding_to_char
and pg_size_pretty function
functionpg_catalog.obj_description
function although descriptions are not supported by Oxla, always returns nulltables
in the information_schema namespacepg_catalog.pg_tablespace
, pg_catalog.pg_database
, information_schema.key_column_usage
, and pg_catalog.pg_am
supportCHANGED
COPY FORM (FORMAT CSV)
INSERT INTO VALUES
queriesFIXED
COPY FROM
queries with large inputsINSERT INTO SELECT
queries where data types were not cast to proper types automaticallyADDED
COPY (table|select statement) TO filename.csv (options)
queryFIXED
DELETE FROM <table_name>
INSERT INTO table SELECT
statement due to the lifetime issuesADDED
CHANGED
FIXED
TEMPORARY COMPATIBILITY ISSUES
FIXED
TEMPORARY COMPATIBILITY ISSUES
ADDED
CHANGED
FIXED
ADDED
CHANGED
FIXED
ADDED
TIMESTAMP WITH TIME ZONE
to DATE
TIMESTAMP WITHOUT TIME ZONE
to TIME WITHOUT TIME ZONE
DATE
and TIME
to TEXT
INSERT INTO
with SELECT
on tables with array columnsMAKE_TIME()
, CURRENT_TIMESTAMP()
, MAKE_DATE()
, DATE()
, MAKE_TIMESTAMP()
, MAKE_INTERVAL()
and MAKE_TIMESTAMPTZ()
functionsDoy
(day of year), Dow
(day of week), Epoch
(sec since 1970-01-01), Quarter
(quarter of the year)EXTRACT()
functionoxla_internal.oxla_role
now contains an additional user_kind
column. In case of already existing home, a migration will add this column automatically if necessaryCHANGED
INTERVALs
by numbers use a marginally slower, but more accurate mode of calculation. Previous (faster, but less accurate) behaviour can be switched on with an optional runtime flagCOPY
statement executionREMOVED
fast_commit.enable_migration flag
. After this change, if home’s version comes from the time before Fast Commit feature release, the migration to the most recent version of home will always be doneCREATE TYPE
, DROP TYPE
, and ALTER TYPE
statements got disabledpg_type
now contains only built-in typesFIXED
COUNT(*)
aggregationsORDER BY
incorrect sorting of INTERVAL
values (ex. placing 31 days
before 1 month
)INTERVAL
values to return incorrect results for equivalent values (e.g. 30 days
= 1 month
would return false)INTERVALs' >= operator
to return potentially incorrect results for all values other than the last fewRANGE
frames when ordering by an INTERVAL
columnINTERVAL
columns to order values incorrectlyJOIN
ing tables with equivalent INTERVAL
values (ex. 30 days
!= 1 month
)LIMIT/OFFSET NULL
would crash OxlaCURRENT_TIMESTAMP()
function behaviour not returning timestamp with timezoneGROUP BY
queries to return incorrect results or crash the serverNULL
literal casting and negationTIME
or DATE
could be erroneously optimised outMIN()
and MAX()
functions behaviour for the following type of queries: SELECT MIN(x) FROM y
NULL
literal (ex. -NULL::INT4
)WHERE … IN (…)
clausesCOMPATIBILITY ISSUES
INTERVAL
support in this release breaks the backwards compatibility for this feature, and will lead to possible loss of data for tables indexed over INTERVAL
columnsADDED
CEILING
alias for CEIL()
functionPI()
functionFIXED
unix_micros
/ millis
/ seconds
functionsINTERVAL
typesUPDATE
and DELETE
mutations to consume too much RAMCOUNT(*)
function, causing them to fail to plan with message about them not being a groupby keyCOUNT(*)
in WHERE
clausesADDED
MIN
, MAX
, CUME_DIST
, NTILE
, BOOL_OR
and BOOL_AND
(in ROWS
mode) window functionsRANGE
mode for window functionsMODE
, PERCENTILE_CONT
and PERCENTILE_DISC
ordered-set aggregate functionsCORR
, COVAR_POP
, COVAR_SAMP
, REGR_AVGX
, REGR_AVGY
, REGR_COUNT
, REGR_INTERCEPT
, REGR_R2
, REGR_SLOPE
, REGR_SXX
, REGR_SXY
, REGR_SYY
, STDDEV
, STDDEV_POP
, STDDEV_SAMP
, VARIANCE
, VAR_POP
, VAR_SAMP
FIXED
AVG
function would return a division by zero
error if the denominator contained a NULL
valueNULL
value by 0 to return error, instead of NULL
SELECT
statements would not resolve DISTINCT
aggregations correctlyDROP USER IF EXISTS
/ DROP ROLE IF EXISTS
. Previously, it was equivalent to DROP USER
out of memory
error in cases when it used to crashDATE_TRUNC
function on nullable dataNULL
valuesSELECT
statementsWITH
clausesADDED
TEXT
type to any other simple typeregexp_match()
functionFIXED
INSERT INTO
statementSELECT
statements, which caused either returning incorrect results or failing to plan for certain queriesADDED
information_schema
, pg_catalog
and system
schemas. Users can now see all objects listed in these tables, when they have grants to a given object or parent schemaON_ERROR
parameter for COPY FROM
operations on CSV files. From now on, users can ignore invalid rows and keep the correct ones in the tableCOPY FROM
operations utilizing ORC and Parquet formats allow for converting numeric types into timestamp or dateCHANGED
COPY FROM
operations utilizing ORC and Parquet formats have more meaningful errorsFIXED
JOIN
clauseSELECT
statementsADDED
COPY FROM
statements now support Parquet formatARRAY
data typeto_char(interval, string)
functionACCESS_CONTROL__INITIAL_PASSWORD
config variable (doesn’t need to be present in subsequent Oxla starts)WINDOW
and OVER
clauses syntaxCOUNT()
, DENSE_RANK()
, LAG()
, LEAD()
, PERCENT_RANK()
, RANK()
, ROW_NUMBER()
, SUM()
functionsROWS
frame mode (no support for GROUPS
and RANG
E frame modes yet)CHANGED
COPY FROM
statements from S3 for smaller .orc
files (~1GB)information_schema.role_table_grants
returns only real privileges that the superuser has on tablesDEPRECATED
leader_election.leader_name
config variable)forced_revoke_timeout
, min_election_timeout
and max_election_timeout
FIXED
SELECT
sub-query expression contained table expressions (e.g. GROUP BY
)SELECT
statements when one of them includes COUNT(*) FROM table
LIMIT
and OFFSET
in JOIN
and UNION
statementsGROUP BY
queries using nested queries with ORDER BY
keyword and LIMIT
clauseSELECT
statements with common subexpression optimisation resulting in data being overriden by other expression for particular cases utilizing JOIN
clausesTIMESTAMPTZ
to the EXTRACT()
functionJOIN ON
clauseADDED
DROP USER
syntaxpg_authid
, pg_shadow
, pg_roles
and pg_user
tablesDISTINCT
support in aggregation functionsFETCH NEXT N ROWS ONLY
syntax as a syntactic sugar for LIMIT
CHANGED
16.0
FIXED
COPY table(columns) FROM
no longer leads to error-related null constraintCOPY FROM
statements for ORC format. Files that contained null values, used to sporadically insert them in cells instead of the valueUPDATE
on indexed tables used to lead to data lossCOMPATIBILITY ISSUES
max_mem_count
increasing the memory map areas, in the following way: sysctl -w vm.max_map_count=262144
ADDED
WITH
statementspg_catalog.pg_auth_members
information_schema.role_usage_grants
information_schema.role_table_grants
network.slots_port
config option, that configures TCP port used for data exchange between nodes during query execution (defaults to 5770
)CHANGED
network.port
) and one for data exchange (network.slots_port
)/
and .
date separators are accepted in timestampsCOPY FROM
for an ORC format is now multithreaded, which comes with speed improvementsCOPY FROM
for an ORC format allows for skipping trailing nullable columnsLIMIT
clause, for cases in which query can end before scanning all inputFIXED
ADDED
INT4
and INT8
type aliasesSUM()
functionINSERT
statementsCOPY FROM
statement with ORC filesVERSION
functionINSERT
statementsCHANGED
oxla_internal.oxla_home_files
paths are relative to Oxla home locationRESULT
is no longer a keywordROUND()
behavior is aligned with PostgreSQL, so it rounds to the nearest even numberSELECT
statement contains multiple ORDER BY
, LIMIT
and OFFSET
clausesFIXED
DROP TABLE
in write-protected namespaces. For example DROP TABLE pg_catalog.pg_class
used to crash Oxla, while now it returns permission denied for schema pg_catalog
GROUP BY
was used internally during execution of a queryJOIN
used to fail in Oxla Planner'
or ;
in comments no longer results in syntax errorADDED
YEAR
, MONTH
, DAY
, HOUR
, MINUTE
, SECOND
YEAR TO MONTH
, DAY TO HOUR
, DAY TO MINUTE
, DAY TO SECOND
, HOUR TO MINUTE
, HOUR TO SECOND
, MINUTE TO SECOND
SELECT INTERVAL '1' HOUR
-> 01:00:00SELECT INTERVAL '1 YEAR 2 MONTH' YEAR
-> 1 yearSELECT INTERVAL '1-2 3 day 04:05:06.070809' DAY TO HOUR
-> 1 year 2 months 3 days 04:00:00oxla_db_event_journal_size
Prometheus metric to probe OXLA events journal sizeSIGN()
mathematical functionCHANGED
COPY
syntax:
CSV
is accepted as an import option without FORMAT
preceding itHEADER
without any other specification is treated as HEADER ON
WITH
is supported without parenthesisDELIMITER
and NULL
import options can be followed by AS
SELECT INTERVAL '2-1'
-> 2 years 1 month
y
, yr
, yrs
d
h
, hr
, hrs
min
, mins
, m
s
, sec
, secs
ms
1 week
, 2 weeks
INSERT INTO information_schema.tables
used to return relation "tables" does not exist
error, while now it returns relation "information_schema.tables" does not exist or is not user table
INSERT INTO pg_catalog.pg_attrdef values...
used to result in relation, pg_catalog.pg_attrdef does not exist or is not user table error
, while now it returns permission denied for table pg_catalog.pg_attrdef
/oxla/data
, /oxla/logs
and /oxla/crash
directories to oxla:oxla
FIXED
InvalidPart Message: One or more of the specified parts could not be found
error when copying data from CSVDELETE/UPDATE
statements would incorrectly return other modification of table is in progress
when restarting OxlaADDED
timestamptz
and interval
interval
and timestamptz
timestamptz
and interval
MIN
and MAX
functions for text columnsnetwork.postgresql_keepalive.*
configurationoxla_net_postgres_nonlocalhost_connections_count
- number of active non-localhost connectionsoxla_net_postgres_last_nonlocalhost_connection
- timestamp of last non-localhost connection event [seconds]oxla_net_postgres_last_nonlocalhost_disconnection
- timestamp of last non-localhost disconnection event [seconds]oxla_net_postgres_last_query_started
- timestamp of last client query started event [seconds]oxla_net_postgres_last_query_finished
- timestamp of last client query finished event [seconds]oxla_net_postgres_queries_ongoing
- number of currently running client queriesOXLA_LOG_FILE
environment variable. It redirects Oxla process logs to a given file inside the containerOXLA_HOME
SELECT 1.1e+3
ORDER BY
keyword for timestampz
CHANGED
OXLA_HOME
; for existing OXLA_HOME
, OIDs will be assigned as beforefile_name
column from oxla_home_files
IF NOT EXISTS
for CREATE TABLE
and CREATE SCHEMA
IF EXISTS
for DROP SCHEMA
COPY TO
CSV file will now terminate each row with Unix-style newline (“\n”) instead of Windows/MS-DOS carriage return/newline (“\r\n”)FIXED
SELECT *
inside UNION
clauseCOMPATIBILITY ISSUES
ADDED
LIKE
operatorreceipts_received_total
metricsCHANGED
select '2024-5-13'::date
used to return 2024-5-13
, from now on it will return 2024-05-13
REMOVED
task_capacity_total
metricFIXED
regex_replace
will work similar as in PostgreSQL, replacing all occurrences only with ‘g’ flag (otherwise replacing only one)ADDED
LIKE
operatorGROUP BY
when at least one of the key columns has TEXT typepgbouncer
when debug flag is addedTRUNCATE
tableTimeZone
and integer_datetimes
. This is needed for compatibility with some external toolsCHANGED
FIXED
INSERT
, UPDATE
and DELETE
queries in rapid successionUNION
, INTERSECT
or EXCEPT
LEFT
and FULL JOIN
returning wrong results on multiple nodes in some situationsCOUNT
function without any parameters caused a crashregexp_replace
worked incorrectly. For example select regexp_replace
(‘123x’, ’(\d+)’, ‘abc’) returned abcabcx, now it correctly returns abcxADDED
pg_table_is_publishable
function was added, takes regclass
as parameter (table oid or name) and returns whether relation is publishable. Oxla doesn’t support publishing hence it always returns false
TIME
and JSON
types in IN
expressionspg_table_size
function takes one parameter which is table regclass and returns it’s sizeQuote_Ident
function mimicking Quote_Ident from postgresPOSITION(str IN substr)
, that works the same as STRPOS
LF
and CRLF
as line breakpg_catalog.pg_proc
tablepg_catalog.pg_get_constraintdef
although descriptions are not supported by Oxla, so it always returns nullpg_table_is_visible
function now also returning whether index associated to given oid is visible within current search_pathformat_type
. It works similar as in Postgres (but only for data types supported in Oxla)pg_table_is_visible
function returning whether table associated to given oid is visible within current search_pathshobj_description
and col_description
added. They always return null, as Oxla does not support “comment on”pg_policy
, pg_statistic_ext
, pg_publication
, pg_publication_rel
, pg_publication_namespace
, pg_inherits
pg_get_userbyid
function returning username associated to given oidpg_index
and pg_class
metatables) will be different for each new index. Previously it was always 0 (and it will remain 0 for indices created on older oxla version)set datestyle = 'ISO, MDY';
is supported (or simply ‘ISO’), but does nothing as ISO, MDY is default value. This is required by some connectors/toolsCHANGED
GROUP BY
columns if they are neutral for aggregation (e. g. changes A + 4 into A)SUM(A + k)
into SUM(A) + k * COUNT(*)
ORDER BY col LIMIT BY ...
where col is a scalar column (integer
, floating point
, boolean
or string
)SUM
operation in aggregation over whole table over INTEGER
, LONG
, FLOAT
, DOUBLE
non nullable columnsMIN
, MAX
operation in aggregation over whole table over INTEGER
, FLOAT
, DOUBLE
non nullable columnsINTEGER
and LONG
types with literal (e. g. my_col <> 53
)WHERE
and JOIN
operationspg_catalog.pg_type
, so they match the ones in Postgres. This change applies only to how type names are shown in pg_type
(Oxla handles types exactly the same as before). Changed names: integer -> int4, real -> float4, boolean -> bool, bigint -> int8, double precision -> float8, timestamp without time zone -> timestamp, timestamp with time zone -> timestamptz, time without time zone -> timeFIXED
pg_total_relation_size
crashing Oxla when provided with invalid literal oidSTRPOS
function is workinglength(<const value>)
function would failADDED
memory.max
and memory.non_query_max
configurationinformation_schema.columns
, which contain information about all columns in user namespacespg_language
tableto_char function
converting timestamp/timestamptz to string using given format stringADDED
information_schema.referential_constraints
table for tools integration purposesto_char
function to convert the number to string using the given format stringto_timestamp
function to convert the string to timestamp using given format stringinterval date_trunc
function working like Postgres date_trunc
pg_catalog.has_database_privilege()
functionpg_enum
, pg_range
, information_schema.character_sets
pg_encoding_to_char
and pg_size_pretty function
functionpg_catalog.obj_description
function although descriptions are not supported by Oxla, always returns nulltables
in the information_schema namespacepg_catalog.pg_tablespace
, pg_catalog.pg_database
, information_schema.key_column_usage
, and pg_catalog.pg_am
supportCHANGED
COPY FORM (FORMAT CSV)
INSERT INTO VALUES
queriesFIXED
COPY FROM
queries with large inputsINSERT INTO SELECT
queries where data types were not cast to proper types automaticallyADDED
COPY (table|select statement) TO filename.csv (options)
queryFIXED
DELETE FROM <table_name>
INSERT INTO table SELECT
statement due to the lifetime issuesADDED
CHANGED
FIXED
TEMPORARY COMPATIBILITY ISSUES
FIXED
TEMPORARY COMPATIBILITY ISSUES
ADDED
CHANGED
FIXED
ADDED
CHANGED
FIXED