Sybase to PostgreSQL migration tools and SAP ASE converters compared on what actually lands
Ten ways to move a Sybase ASE database into PostgreSQL, judged on the rows that arrive. A popular converter maps four-decimal MONEY onto a PostgreSQL type that keeps two, AWS DMS trims trailing zero bytes from binary values, and pgloader does not read Sybase at all. All three are in the vendors' own documentation.
The live demo needs no card, and Starter is $49 a month.
Field mapping auto-plugged · tap a port to rewire
Plug a source port into
Transform on this cable
JSON in
JSON out
5 sample records ready
Vendor documentation read 6 October 2026
Which Sybase to PostgreSQL migration tool should you use?
For a one-time move of SAP ASE 16.0 or older into RDS or Aurora PostgreSQL, use AWS SCT or DMS Schema Conversion for the schema and AWS DMS for the data. For databases built mostly from T-SQL procedures, add a code converter such as Ispirer or SQLines. For an ongoing sync while the application is rewritten, use a tool that lets you declare the PostgreSQL columns. Whatever you pick, map MONEY to NUMERIC(19,4) by hand before any data moves.
This route sits under our data migration tools guide. ASE shares its T-SQL roots with Microsoft's engine, so the closest sibling is SQL Server to PostgreSQL migration tools, where published type maps fail a check against the documentation in a similar way. If IBM is the other legacy engine in the building, its version of this problem is on Db2 to PostgreSQL migration tools.
Eight documented behaviors that change your data between Sybase ASE and PostgreSQL
Each row sets a tool's documentation against what SAP or PostgreSQL say about the same thing. The first one is a published type mapping from one of the best known converters on this route, and it rests on PostgreSQL's MONEY type behaving like ASE's. PostgreSQL's own manual says it does not.
| Tool and setting | What the documentation says | Why it matters to a buyer | What we would ship |
|---|---|---|---|
| SQLines, MONEY | The published map sends MONEY and SMALLMONEY to PostgreSQL MONEY. SAP: both are "accurate to one ten-thousandth of a monetary unit". PostgreSQL: MONEY precision "is determined by the database's lc_monetary setting". | Under a US locale that is two decimal places. A rate of 12.3456 stored for twenty years in ASE arrives with two digits, and nothing errors. | NUMERIC(19,4) |
| AWS DMS, unsigned BIGINT | DMS reads UNSIGNED BIGINT as UINT8 and its PostgreSQL target writes UINT8 as BIGINT. ASE unsigned bigint reaches 18,446,744,073,709,551,615. PostgreSQL BIGINT stops at 9,223,372,036,854,775,807. | Fine for years, until one ID or hash crosses 2^63. That row fails and the table is now missing it. | NUMERIC(20) |
| AWS DMS, binary columns | DMS documents that "Zero values located at the end of binary data type strings are truncated when replicated to the target database." | Hashes, tokens and packed keys stored as BINARY lose trailing zero bytes, so a lookup on the original value finds nothing. | Compare lengths after load |
| AWS DMS, the log | DMS sets a $replication_truncation_point in syslogshold and tells you to keep the task running "to prevent the database log from becoming excessively large". Stopping for good needs dbcc settrunc. | A paused or abandoned test task stops ASE from truncating its log. Production fills the log device weeks later, far from the migration team. | Clear the point on every exit |
| AWS DMS, one CDC task | DMS allows "only one AWS DMS task with ongoing replication or CDC for each SAP ASE database." Qlik Replicate documents the same one-task rule for ASE. | A large database cannot be split across parallel replication tasks to go faster. Capacity has to come from one task. | Size one task, test lag |
| AWS DMS, MERGE and UDTs | Running MERGE during CDC "will result in a non-recoverable error", fixed by a new full load. Columns of a user-defined type "are created as NULL". | ASE supports MERGE, so one nightly job can end replication. UDT columns arrive empty with no failed row to flag them. | Base types in target DDL |
| SCT and DMS Schema Conversion, names | SCT converts object, variable and parameter names to lowercase by default. DMS Schema Conversion also adds LOWER() casts to operands of case-insensitive comparisons by default. | Correct results, but a WHERE LOWER(col) = ... cannot use a plain index on col. Reports that took a second on ASE can scan the table. | Expression index or citext |
| pgloader, Sybase source | pgloader lists SQLite, MySQL, MS SQL Server, PostgreSQL and Redshift as source databases. Sybase ASE is not documented. | The free loader most PostgreSQL teams reach for first does not read this source, so the plan needs another loader or an export step. | Budget a loader |
The first row is the one to take away. Name matching makes MONEY to MONEY look like the safest line in the whole mapping, and the load raises no error. But SAP stores money to the ten-thousandth, and PostgreSQL's MONEY takes its decimal places from the database locale, which for US dollars is two. FX rates, per-unit prices and accrued interest are exactly the values that use the extra places. AWS DMS gets this one right and sends MONEY to NUMERIC. If the plan is to keep PostgreSQL current from ASE rather than move once, the capture options are compared in change data capture tools.
Sybase ASE types in PostgreSQL, and the wrong target a careless map picks
Most of a Sybase to PostgreSQL conversion is easy. INT, SMALLINT, signed BIGINT, DECIMAL, DATE, CHAR and VARCHAR cross unchanged. These twelve are the ones where the obvious choice, or the one a tool makes for you, changes or loses data.
| SAP ASE type | Right PostgreSQL target | Common wrong target |
|---|---|---|
| MONEY | NUMERIC(19,4) | MONEY, two decimals under a US locale |
| SMALLMONEY | NUMERIC(10,4) | MONEY, same rounding |
| BIT | BOOLEAN NOT NULL | BOOLEAN that now accepts NULL |
| TINYINT | SMALLINT CHECK (0 to 255) | SMALLINT that takes negatives |
| UNSIGNED BIGINT | NUMERIC(20) | BIGINT, which overflows past 2^63 |
| UNSIGNED INT | BIGINT | INTEGER, which overflows past 2^31 |
| DATETIME | TIMESTAMP(3) | Text from a bcp file in a local format |
| BIGDATETIME | TIMESTAMP(6) | TIMESTAMP(3) copied from the DATETIME rule |
| VARCHAR holding '' | VARCHAR, blanks decided | Copied as is, then new rows add a second kind of empty |
| BINARY(n), VARBINARY | BYTEA, lengths checked | BYTEA with trailing zeros cut in CDC |
| IDENTITY | GENERATED BY DEFAULT AS IDENTITY | A sequence left at 1 after the load |
| User-defined type | Its base type, declared | A column DMS creates as NULL |
Two rows catch teams on meaning rather than values. SAP's manual says an empty string "is interpreted as a single blank in insert or assignment statements on varchar data", so twenty years of ASE rows hold a space where the application thought it wrote nothing. PostgreSQL stores a true empty string, and after cutover the table holds both. BIT is the second: ASE does not allow NULL in a bit column at all, so declare the BOOLEAN NOT NULL or new code will add a third state the old reports never saw. The procedural side of the same conversion, from @@error to *= joins, is in our guide to converting Sybase T-SQL to PostgreSQL.
Sybase to PostgreSQL migration tools and converters compared
Billing units rather than price tags, because none of the commercial vendors here publish a list price for this route. Four names people search for are missing on purpose: pgloader and Airbyte have no Sybase source, Debezium has no ASE connector, and CYBERTEC's Migrator does not support Sybase today. Where a tool is wrong for a job, the last column says so, including for us.
| Tool | Approach | Best for | Billing unit | What to watch |
|---|---|---|---|---|
| AWS SCT | Desktop schema and T-SQL conversion with an assessment report | ASE 12.5.4 to 16.0 moving to RDS or Aurora | No charge for the tool itself | Lists 16.0, not 16.1 |
| DMS Schema Conversion | Console conversion of ASE 16 with generative AI for procedures | Teams already working in the DMS console | Part of AWS DMS, see AWS pricing | Adds LOWER() casts by default |
| AWS DMS | Full load plus log-based CDC through dbcc logtransfer | One-time moves inside AWS with a cutover date | Replication instance hours or serverless capacity | One CDC task per database |
| SQLines | Converts DDL, queries and T-SQL, plus a data mover | Procedure heavy schemas, ASE 11.x to 16 | Licensed tools, quoted | MONEY to MONEY by default |
| Ispirer | Automated schema, data, procedure and app code conversion | Large estates with a services budget | Toolkit only, or toolkit plus services | Review time drives the cost |
| EDB Migration Toolkit | Moves schemas, tables, constraints, indexes and data | Teams standardizing on EDB Postgres | Not published on its docs page | ASE 15.7 and 16.0, no procedures |
| Qlik Replicate | Log-based replication from ASE 16 | Existing Qlik estates at high change volume | Quoted license plus servers | One task per ASE database |
| Fivetran HVR | Log-based capture from ASE 16.0 SP00 to SP04 | Teams already on Fivetran HVR | Quoted by Fivetran | Check 16.1 support first |
| tds_fdw | PostgreSQL extension that queries ASE tables over TDS | A DBA moving data with INSERT ... SELECT | Open source, no license fee | Data only, no code conversion |
| Adapters | Declared column mapping, incremental sync, per-record logs | Typed PostgreSQL tables fed from ASE on a flat bill | Flat monthly from $49, no per-row overage fees | Does not convert T-SQL |
The AWS rows deserve a second look because they are where most US projects start. SCT lists ASE 12.5.4 through 16.0 and DMS Schema Conversion lists ASE 16, so a team that upgraded to 16.1 to stay in maintenance should confirm support before it plans around them. For what a cutover of this size costs once the tool is chosen, see what a data migration really costs, and for another commercial engine where the converter's defaults are the risk, the Oracle to PostgreSQL migration tools page.
Six numbers to know before you sign anything
July 2025
When ASE 16.0 SP03 reached end of mainstream maintenance. SAP points those customers to 16.0 SP04 or 16.1.
SAP KBA 3785425, read 6 Oct 2026
4 vs 2
Decimal places an ASE MONEY value keeps, against the two a PostgreSQL MONEY column keeps under a US locale.
SAP ASE reference and PostgreSQL manual, read 6 Oct 2026
1
AWS DMS tasks with ongoing replication allowed per SAP ASE database. Full-load-only tasks can run in parallel.
AWS DMS SAP ASE source page, read 6 Oct 2026
16.0
The newest ASE release AWS SCT lists as a source. 16.1 shipped in 2025 and is not on the list.
AWS SCT user guide, read 6 Oct 2026
2x
How far ASE unsigned bigint reaches past PostgreSQL BIGINT, the target DMS writes it to by default.
SAP ASE reference, AWS DMS and PostgreSQL docs, read 6 Oct 2026
0
Sybase sources in the pgloader documentation. It reads SQLite, MySQL, SQL Server, PostgreSQL and Redshift.
pgloader documentation, read 6 Oct 2026
Eight ways this migration goes wrong while every check stays green
ASE and PostgreSQL agree on more than their syntax suggests. Both have exact NUMERIC types, both have identity columns and both keep NULL apart from a value. The trouble sits in the places they disagree, where a value is legal on both sides and means something different after it lands.
| The failure | What you see | What is actually happening |
|---|---|---|
| Rates drift | Row counts match, totals close | MONEY went to PostgreSQL MONEY and the third and fourth decimal places were rounded away on load. |
| Two kinds of empty | A filter misses old rows | ASE stored '' as a single blank for years. New PostgreSQL rows store a true empty string, and WHERE col = '' finds only those. |
| Lookups by hash fail | A few keys not found | DMS replication cut trailing zero bytes from BINARY values, so the stored key no longer equals the one the app sends. |
| Log device fills | ASE stops on a full log | A stopped DMS task left its truncation point in syslogshold, and ASE could not free the log behind it. |
| A column is empty | Load reports success | The column used a user-defined type, which DMS creates as NULL rather than mapping to its base type. |
| Reports slow down | Same results, ten times slower | Converted comparisons wrap the column in LOWER(), so the plain index the query used on ASE is skipped. |
| False counts change | Dashboards disagree with ASE | BIT became a nullable BOOLEAN. New code writes NULL where ASE could only hold 0, and COUNT of false drops. |
| IDs collide after cutover | First insert fails on the key | DMS does not move sequences during ongoing replication, so identity values restart below the loaded maximum. |
Four of the eight are fixed in the DDL before the first row moves. The binary trim and the log truncation point are tool behaviors you plan around, and the blank string and identity restart belong in the cutover runbook. If PostgreSQL is a stop on the way to reporting, the loading side is covered on Postgres ETL tools.
Six steps that decide whether this migration works
Step 1
Confirm the release and topology
Run select @@version and note whether the server is ASE 15.7, 16.0 SP03, SP04 or 16.1, and whether it is in an MSA or Warm Standby pair. SCT stops at 16.0 and DMS refuses MSA sources, so this decides the tool list.
Step 2
Inventory the risky columns
Query syscolumns joined to systypes for every money, smallmoney, bit, tinyint, unsigned integer, binary, identity and user-defined type column. That list, not the table count, is the real scope.
Step 3
Write or correct the DDL by hand
Let SCT, SQLines or Ispirer draft it, then apply the targets on this page: NUMERIC(19,4) for MONEY, BOOLEAN NOT NULL for BIT, NUMERIC(20) for unsigned BIGINT, base types for UDTs. Create the tables before any loader runs.
Step 4
Decide what a blank string means
ASE turned every '' into a single blank. Choose whether PostgreSQL keeps the blank or trims it to empty, apply the rule in the load, and tell the application team so new rows follow it.
Step 5
Full load, then keep PostgreSQL current
Load history once, then follow changes until the switch. With DMS that means sp_setreptable, RepAgent off and one CDC task per database. Pause any job that runs MERGE while CDC is live.
Step 6
Reconcile values, then clean up
Compare SUM on every money column to four places, lengths on binary columns and MIN and MAX on timestamps. Restart identities above the loaded maximum, then remove the DMS truncation point with dbcc settrunc.
Step five is where a subscription earns its keep or does not. If the move is one weekend, DMS does it and you are done. If ASE stays live for months while procedures are rewritten, you need the same mapping running every few minutes with MONEY kept to four places and a log of every record, which is what a flat Adapters plan covers with no per-row overage fees.
Why US teams fund this project
Trading and banking back offices
Settlement, positions and risk systems built on Sybase decades ago still run on ASE at many US banks and brokers. Their money columns carry four decimals for a reason, which is why MONEY mapping matters here first.
Getting off an aging maintenance line
Teams on 16.0 SP03 are already out of mainstream maintenance. Finance is weighing an upgrade to SP04 or 16.1, third party support or an exit, and PostgreSQL is the exit most of them price.
Moving to RDS or Aurora PostgreSQL
A cloud program already decided on managed PostgreSQL. AWS tools handle ASE 16.0 and older cleanly, and the open question is what keeps data current during a months-long code rewrite.
Telecom and utility billing
Rating engines and billing ledgers on ASE store per-minute and per-unit rates below a cent. The rows are simple, the precision is not, and an audit will compare invoices line for line.
Public sector and healthcare records
Agencies and hospital systems with ASE case or claims databases move to PostgreSQL to cut license spend, under change control that wants every converted value proven, not sampled.
Running both during a long cutover
Hundreds of T-SQL procedures take quarters to rewrite. ASE stays the system of record while PostgreSQL is kept current and checked against it, so the switch is a short window instead of a weekend.
Five jobs where you should not pick us
A comparison page that never says the competition wins is an advert. These are the cases where something else on this page is the right answer.
- This is a one-time move of ASE 16.0 or older inside AWS with a fixed cutover date. SCT or DMS Schema Conversion for the schema and DMS for the data is the documented path, it bills by the hour, and a subscription adds nothing once the switch is done.
- Your database is mostly T-SQL procedures and triggers. That is a code conversion project, and Ispirer, SQLines or AWS's converters are built for it. We do not convert procedural code at all.
- You need log-based capture at high change volume with sub-minute lag. Qlik Replicate, Fivetran HVR or DMS read the ASE log, and our scheduled sync will not beat them on latency.
- You are standardizing on EDB Postgres and already pay for its subscription. Its Migration Toolkit moves ASE 15.7 and 16.0 schemas and data inside a support contract you have.
- You only need the data once and have a DBA who likes SQL. tds_fdw lets PostgreSQL read ASE tables directly, and an INSERT ... SELECT per table costs nothing in licenses.
Four questions to ask any vendor on this list
Question 01
Which ASE releases and topologies do you read?
Ask about 16.0 SP04, 16.1 and MSA or Warm Standby by name. SCT lists 16.0 as its newest source and DMS rejects MSA, so a vague "Sybase supported" is not an answer.
Question 02
What happens to MONEY and SMALLMONEY?
The fastest question on this route. The right answer is NUMERIC with four decimal places in both the load and the ongoing sync. A MONEY column or a FLOAT tells you where reconciliation will fail.
Question 03
Can I see the DDL before anything loads?
Ask for the generated CREATE TABLE statements for your five riskiest tables, including one with a user-defined type and one with an unsigned BIGINT. Tables created at load time carry the tool's defaults.
Question 04
What does it cost when volume doubles?
Instance hours, rows and licenses all grow with data. Ask for the bill at twice your current volume and for the month of the initial full load, which is often the most expensive month of the contract.
Related Sybase and PostgreSQL guides
Convert Sybase T-SQL to PostgreSQL
The statement and function mapping, and the ASE behaviors that compile in PL/pgSQL and still change results.
SQL Server to PostgreSQL migration tools
The other T-SQL engine into the same target, where published type mappings fail a check against the docs.
Db2 to PostgreSQL migration tools
IBM's route into PostgreSQL, where DECFLOAT plays the part MONEY plays here.
Oracle to PostgreSQL migration tools
The largest commercial source into PostgreSQL, rated against AWS's own automation scores.
Change data capture tools
The ways to follow ASE changes until cutover, and what each one needs switched on.
Data migration tools
The pillar above this page, covering one-time cutovers across every source and target.
Questions buyers ask about Sybase to PostgreSQL migration
- How do I migrate from Sybase to PostgreSQL?
- Convert the schema with AWS SCT, DMS Schema Conversion, SQLines or Ispirer, then correct the DDL by hand: NUMERIC(19,4) for MONEY, BOOLEAN NOT NULL for BIT, NUMERIC(20) for unsigned BIGINT and a decision on blank strings. Run a full load, keep PostgreSQL current until cutover, and reconcile on sums rather than row counts.
- What is the best Sybase to PostgreSQL migration tool?
- For ASE 16.0 or older moving into RDS or Aurora PostgreSQL, AWS SCT or DMS Schema Conversion for the schema and AWS DMS for the data is the standard pairing. Ispirer and SQLines convert T-SQL procedures. For an ongoing sync into typed PostgreSQL tables during a long rewrite, use a tool that lets you declare the target columns.
- Can pgloader migrate Sybase to PostgreSQL?
- No. The pgloader documentation lists SQLite, MySQL, MS SQL Server, PostgreSQL and Redshift as source databases, and Sybase ASE is not among them. ASE and SQL Server share a T-SQL heritage, but pgloader does not document reading ASE through its SQL Server path, so plan on a different loader or a CSV export step.
- Does AWS SCT support Sybase ASE to PostgreSQL?
- Yes. AWS SCT lists SAP ASE 12.5.4, 15.0.2, 15.5, 15.7 and 16.0 as sources, with PostgreSQL and Aurora PostgreSQL among the targets. ASE 16.1 is not on that list. Since 20 November 2025, DMS Schema Conversion in the AWS console also converts SAP ASE 16 to RDS and Aurora PostgreSQL, with generative AI for procedures and triggers.
- Does AWS DMS support SAP ASE as a source?
- Yes. DMS lists SAP ASE 12.5, 15, 15.5, 15.7, 16 and higher. It needs tables enabled with sp_setreptable, RepAgent disabled, and a user with sa_role, replication_role and sybase_ts_role. Only one DMS task with ongoing replication can run per ASE database, and MSA or Warm Standby sources are not supported.
- What is the PostgreSQL equivalent of Sybase money?
- NUMERIC(19,4) for MONEY and NUMERIC(10,4) for SMALLMONEY. SAP documents both as accurate to one ten-thousandth of a monetary unit. PostgreSQL has a MONEY type too, but its fractional precision comes from the lc_monetary locale, which is two digits for US dollars, so the third and fourth decimal places do not survive.
- What is the PostgreSQL equivalent of Sybase bit?
- BOOLEAN NOT NULL. SAP ASE states that columns of type bit cannot be NULL, so the source only ever holds 0 or 1. A PostgreSQL BOOLEAN accepts NULL unless you say otherwise, and once new code starts writing NULL, every report that counts false rows stops matching the old system.
- How do I convert Sybase stored procedures to PostgreSQL?
- With a converter for volume and a person for review. AWS SCT, DMS Schema Conversion, Ispirer and SQLines all translate ASE T-SQL into PL/pgSQL. Expect manual work on @@error checks, which become EXCEPTION blocks, on @@rowcount, which becomes GET DIAGNOSTICS, on legacy *= outer joins and on procedures that return result sets.
- Is SAP ASE end of life?
- Not the product, but older releases are. SAP KBA 3785425 says ASE 16.0 SP03 reached end of mainstream maintenance in July 2025 and recommends moving to 16.0 SP04 or 16.1, which shipped in 2025. SAP pages disagree on the date for 16.0 as a whole, so check SAP Note 1922006 for your exact release.
- How much does a Sybase to PostgreSQL migration cost?
- The tool is the small part. AWS SCT has no charge, DMS bills replication instance hours, Ispirer sells a toolkit with or without services, and SQLines is licensed and quoted. Rewriting and testing T-SQL procedures dominates. An ongoing sync while the application is rebuilt is a monthly subscription, which on Adapters starts at $49.
For the wider vendor landscape see the best data integration tools, and for the nearest relative of ASE's procedural code, the SQL Server T-SQL conversion guide lists translations that compile cleanly and return a different answer, most of which apply to ASE too.
Keep PostgreSQL in step with Sybase ASE until the day you switch
Declare the columns once with NUMERIC(19,4) where ASE had MONEY and BOOLEAN NOT NULL for bit, run the backfill, then let the same mapping sync incrementally with retries and per-record logs. From $49 a month, with no per-row overage fees.
The live demo needs no card, and Starter is $49 a month.