Sybase SQL Anywhere to PostgreSQL Migration

SQLines tools can help you transfer data, convert database schema (DDL), views, stored procedures, functions, triggers, queries and SQL scripts from SAP Sybase SQL Anywhere, Sybase Adaptive Server Anywhere (ASA) to PostgreSQL (Postgres).

Databases:

  • SAP Sybase SQL Anywhere 17, 16, 12, 11, 10, 9 and 5
  • PostgreSQL 18.x, 17.x, 16.x, 15.x, 14.x, 13.x, 12.x, 11.x, 10.x and 9.x

Migration Reference

SQL Language Elements

Operators:

Sybase SQL Anywhere PostgreSQL
1 str1 || str2 || ... String concatenation, NULLs ignored CONCAT(str1, str2, ...) str1 || str2 || ...

Data Types

Date and time data types:

Sybase SQL Anywhere PostgreSQL
1 DATE Date (year, month and day) DATE
2 DATETIME Date and time with fraction TIMESTAMP
3 DATETIMEOFFSET Date and time with fraction and time zone TIMESTAMP WITH TIME ZONE
4 SMALLDATETIME Date and time with fraction TIMESTAMP
5 TIME Time (hour, minute, second and fraction) TIME
6 TIMESTAMP Date and time with fraction (microseconds) TIMESTAMP(p)
7 TIMESTAMP WITH TIME ZONE Date and time with fraction and time zone TIMESTAMP WITH TIME ZONE

Converting data types:

Sybase SQL Anywhere PostgreSQL
1 BIGINT 64-bit integer BIGINT
2 BINARY(n) Variable-length binary string, 1 ⇐ n ⇐ 32767 BYTEA
3 BINARY VARYING(n) Variable-length binary string, 1 ⇐ n ⇐ 32767 BYTEA
4 CHAR(n), CHARACTER(n) Fixed-length string, 1 ⇐ n ⇐ 32767 CHAR(n), CHARACTER(n)
5 DECIMAL(p,s), DEC(p,s) Fixed point number DECIMAL(p,s), DEC(p,s)
6 DOUBLE [PRECISION] Double-precision floating-point number DOUBLE PRECISION
7 FLOAT(p) Floating-point number DOUBLE PRECISION
8 IMAGE Binary data, ⇐ 2G BYTEA
9 INTEGER, INT 32-bit integer INTEGER, INT
10 LONG BINARY Binary data, ⇐ 2G BYTEA
11 LONG BIT VARYING Bit array data, ⇐ 2G BYTEA
12 LONG NVARCHAR UTF-8 character data, ⇐ 2G TEXT
13 LONG VARBIT Bit array data, ⇐ 2G BYTEA
14 LONG VARCHAR Character data, ⇐ 2G TEXT
15 MONEY Monetary data MONEY
16 NCHAR(n) Fixed-length UTF-8 string, 1 ⇐ n ⇐ 32767 CHAR(n)
17 NTEXT UTF-8 character data, ⇐ 2G TEXT
18 NUMERIC(p,s) Fixed point number NUMERIC(p,s)
19 NVARCHAR(n) Variable-length UTF-8 string, 1 ⇐ n ⇐ 32767 VARCHAR(n)
20 REAL Single-precision floating-point number REAL
21 SMALLINT 16-bit integer SMALLINT
22 SMALLMONEY Monetary data, ⇐ million currency units MONEY
23 TEXT Character data, ⇐ 2G TEXT
24 TINYINT 8-bit unsigned integer, 0 to 255 SMALLINT
25 UNSIGNED BIGINT 64-bit unsigned integer NUMERIC(20)
26 UNSIGNED INT 32-bit unsigned integer NUMERIC(10)
27 UNSIGNED SMALLINT 16-bit unsigned integer NUMERIC(5)
28 UNSIGNED TINYINT 8-bit unsigned integer NUMERIC(3)
29 VARBINARY(n) Variable-length binary string, 1 ⇐ n ⇐ 32767 BYTEA
30 VARCHAR(n) Variable-length string, 1 ⇐ n ⇐ 32767 VARCHAR(n)

Other data types:

Sybase SQL Anywhere PostgreSQL
1 BIT 0, 1 or NULL BOOLEAN, BOOL
2 BIT VARYING(n) Variable-length bit array, 1 ⇐ n ⇐ 32767 BIT VARYING(n)
3 UNIQUEIDENTIFIER 16-byte GUID (UUID) data CHAR(16)
4 UNIQUEIDENTIFIERSTR GUID (UUID) data in string format UUID
5 VARBIT(n) Variable-length bit array, 1 ⇐ n ⇐ 32767 VARBIT(n)
6 XML XML data XML

CREATE TABLE Statement

Converting table definitions:

Sybase SQL Anywhere PostgreSQL
1 DEFAULT AUTOINCREMENT Autoincrement column GENERATED BY DEFAULT AS IDENTITY
2 AUTOINCREMENT on DECIMAL and NUMERIC columns IDENTITY on integer columns only
3 DEFAULT TIMESTAMP Auto-updated timestamp column DEFAULT CLOCK_TIMESTAMP() and update trigger

CREATE PROCEDURE Statement

Converting stored procedures:

Sybase SQL Anywhere PostgreSQL
1 CREATE ORE REPLACE PROCEDURE name CREATE OR REPLACE PROCEDURE name
2 IN | OUT | INOUT param datatype DEFAULT exp IN | OUT | INOUT param datatype DEFAULT exp
3 () required when no parameters () required when no parameters
4 RESULT(col datatype, ...) Result set columns Defined by result set query and REFCURSOR
5 Standalone SELECT Return result set OPEN cursor FOR SELECT

For further information, see Conversion of Procedural Statements.

CREATE FUNCTION Statement

Converting user-defined functions:

Sybase SQL Anywhere PostgreSQL
1 CREATE FUNCTION name CREATE OR REPLACE FUNCTION name
2 (IN param datatype(length) DEFAULT default, …) (IN param datatype(length) DEFAULT default, …)
3 RETURNS datatype(len) RETURNS datatype(len)

For further information, see Conversion of Procedural Statements.

Procedural SQL Statements

Cursor declaration and operations:

Sybase SQL Anywhere PostgreSQL
1 FOR rec CURSOR FOR SELECT ... DO ... END FOR Cursor loop FOR rec IN SELECT ... LOOP ... END LOOP

Flow-of-control statements:

Sybase SQL Anywhere PostgreSQL
1 IF … THEN … ELSEIF … ELSE … END IF IF statement IF … THEN … ELSEIF … ELSE … END IF

Temporary tables:

Sybase SQL Anywhere PostgreSQL
1 DECLARE LOCAL TEMPORARY TABLE name (columns) CREATE TEMPORARY TABLE name (columns)
2 ON COMMIT DELETE ROW | PRESERVE ROWS ON COMMIT DELETE ROW | PRESERVE ROWS
3 NOT TRANSACTIONAL Always transactional

Error handling:

Sybase SQL Anywhere PostgreSQL
1 RAISERROR error_num text Raise an error RAISE EXCEPTION '%', text USING ERRCODE = error_num

Other statements:

Sybase SQL Anywhere PostgreSQL
1 MESSAGE text TYPE type TO destination Send a message RAISE NOTICE '%', text