Announcing NuoDB 3.0.1!

Continuing with our commitment to continuous improvement and planned delivery of specific customer requests, we are thrilled to present our latest NuoDB Release for General Availability.

NuoDB 3.0.1  is available for download now by clicking here.  

We thank our large community of users for their feedback, helping this to be our strongest release to date.  For more details, visit our NuoDB Customer Portal to explore our release notes.

Happy Developing!

____________________________________

Release 3.0.1 Known Issues

Pad Collation

NuoDB does not support the NO PAD collation option. This can have unexpected results when comparing two strings where one is a substring of the other. E.g:

  • "abc" = "abc "
  • "abc" > "abcX", where X is a non-printing char with value less than ASCII 32 (SPACE)

XA support

  • XA support in NuoDB does not support interleaved XA transactions on the same session. That is, a new XA transaction with a new XID cannot be started on the same session until the existing XA transaction with another XID has been committed.
  • The XA DataSource does not support statement and connection caching like the regular DataSource.

TABLE

  • The nuosql command line does not allow creating tables with different cases (e.g. MyTable and mytable). The workaround is to use another client to create tables with the same name but different case or create tables with different names instead of different case.
  • ALTER TABLE can only create a single unnamed check constraint. The workaround is to either add the unnamed check constraints during the CREATE TABLE command or use named check constraints.
  • Temporary table index statistics are not automatically updated like regular table index statistics. To update temporary table statistics, use the ANALYZE command.
  • Truncating and recreating the same table concurrently from different clients can potentially result in not being able to insert rows

ALTER TABLE command

The ALTER TABLE command is not supported for temporary tables. The workaround is to create a permanent table if it needs to be altered.

Renaming of Triggers and Indexes

Renaming of Triggers and Indexes is not supported. The workaround is to drop and recreate the Trigger or Index with the new name.

DDL statements

  • DDL statements are not supported in Stored Procedures, except through the usage of 'Dynamic SQL'. For example:
  • DDL within stored procedures is not accessible by DML within the same stored procedure, but can be accessed in a separate stored procedure executed after the stored procedure which executed the DDL.
  • DDL statements are executed in separate system transactions and are not part of the user transactions. As a result, the DDL statement is immediately visible under READ COMMITTED transaction isolation and will not be rolled back if the user transaction is.

Case sensitivity

If objects created with case sensitivity using quotes (e.g. CREATE TABLE ""MyTable""), to drop those objects successfully, the same case sensitivity and quotes must be used (e.g. DROP TABLE ""MyTable""). If the object is dropped without quotes (and making the name case insensitive), then no error is returned but the object is not fully dropped.

Global temporary tables

Global temporary tables are not supported. There is no workaround.

Triggers

  • Transaction commit and rollback statements are not allowed to be called within a Trigger. There is no workaround.
  • NuoDB does not support recursive DDL triggers.

Removing a SG from a SM

When a Storage Group is removed from a Storage Manager, the on disk files for the remove data are not automatically deleted. To remove these files, nuochk must be used.

SELECT statement

  • A SELECT statement that fetches a column of type BLOB only returns the decimal value for each character in the BLOB.
  • A SELECT with extra parentheses around a subquery will generate an error. The workaround is to remove the extra set of parentheses.

Indexes

  • There are known issues with creating an index on a table with concurrent writes to the same table. The workaround is to either ensure that the create index and concurrent writes are being sent to the same TE, or issue the create index command during a period of low activity or maintenance window.
  • Quoted table or index names in index hints must be specified in all uppercase letters. Otherwise an error ""Can't follow the specified Use_Index hint(s)"" is returned.
  • Index name uniqueness may not be enforced when adding constraints using CREATE TABLE. Do not use DROP INDEX for dropping table constraints, use ALTER TABLE DROP CONSTRAINT instead.
  • When creating partitioned tables with unique indexes or primary keys, users must make sure that the partitioning key is a subset of all unique indexes and of the primary key. If this criterion is not met, then the unique integrity constraint will not be enforced. Users can use SHOW TABLE <table name> to discover columns belonging to unique indexes/primary key for a table.
  • String values stored in a covering index have their trailing spaces trimmed.

Timestamps

NuoDB converts string literals to UTC timestamps (or DateTime types) ignoring the timezone information. To get around this issue, users must always supply timestamps and date-times values in the absolute (UTC timezone) value.

Updatable cursors

When working with updatable cursors (cursors created specifying the FOR UPDATE clause), users must make sure to not reference rows after they have been deleted. Failure to do so will lead to a connection reset. For example, do not use the syntax as shown below. It will result in a connect reset at the

  • open cur1; fetch cur1 into x; while(fetch_status() = 0) delete from t1 where current of cur1;
  • fetch cur1 into x; -- referencing deleted current row will cause a reset end_while; close cur1;"

Columns

  • Columns named HELP may pick up leading spaces from the query used to create. The workaround is to use single quotes or use another name for the column.
  • Altering a column data type does not change the values stored in the table. It only changes the metadata of the field.

ALTER sequence

Trying to alter a sequence to set the start value equal to a value less than the ceiling does not generate an error. While no error is returned, the operation also does not change the start value.

Schema

No error message is provided when if a schema that does not exist is dropped.

Dropping a schema may return an error if there is a table trigger that references a view in the schema. The workaround is to drop the trigger before dropping the schema.

Domains

  • Custom data types created with 'create domain' cannot be referenced by stored procedures. There is no workaround.
  • When dropping a domain, the same case (as was used to create the domain) for the domain name must be used. Otherwise, the domain will be left in the domains system table. The workaround is to recreate the domain and drop the domain with the same case.

Queries

  • Queries returning expressions derived from decimal literals or long integer literals will have string type rather than a number type.
  • Returns from queries containing subqueries that return arithmetic can be erroneously typed as strings.

Aggregate functions

  • The use of aggregate functions inside an OVER clause is not supported. For example, "PARTITION BY count(*)" is not supported.
​Decimal Values​
  • Decimal values can erroneously be returned to clients as one of the three integer types (SMALLINT, INTEGER, BIGINT) along with a scale.
​JDBC driver​
  • The JDBC driver does not support the setNetworkTimeout property.
  • The JDBC driver does not support scrollable cursors.

Nuodbmgr commands

  • The Nuodbmgr command 'capture' does not store altAddress values if advertiseAlt is set to true. Instead the local DNS IP address is used.
  • The following host properties are not displayed by the nuodbmgr command: agentPeerTimeout, binDir, log, regionBalancerLocalFallback, requireConnectKey, trackprocessOnReconnect.

Database processes

  • If a database process (TE or SM) does not connect to the Agent process, it cannot be stopped or restarted. If this happens, the database process is shown as UNREACHABLE. To workaround this, manually stop the database process using {{kill -6 <pid>}}, and remove the entry using the nuodbmgr command 'domainstate removeprocess id <id>', then contact Support with the core file obtained by the kill command.
  • When the network partition is healed, it may not be possible to restart the engine processes. This is because the database state in the Brokers/Agents is incorrect. To workaround this issue, restart all Brokers and/or Agents in all Regions.

Nuochk

Nuochk only validates an archive from a single Storage Manager. If Storage Groups are used and a transaction spans multiple Storage Managers, it is possible that nuochk may incorrectly report missing record errors. The workaround is to start up all the Storage Managers for all of the Storage Groups, allow the Storage Managers to complete recovery and then run nuochk on a single archive.

 

Have more questions? Submit a request

Comments