Progress OpenEdge (formerly Progress 4GL) is an application development platform and database management system widely used for business applications. DataMeans reads Progress data from the text dumps the Data Dictionary writes: a .df schema file and .d data files.
What You Can Upload
- A
.dfschema dump (Admin > Dump Data and Definitions > Data Definitions) .ddata dumps, one per table (Admin > Dump Data and Definitions > Table Contents, or the ABLEXPORTstatement)- A ZIP archive containing the
.dfand.dfiles
The binary database can't be read: the .db file, its extents (.d1, .b1 and so on) and the .st structure file. Note the difference between a .d text dump, which DataMeans reads, and a .d1 data extent, which it can't.
What You Get Out
DataMeans converts your data into multiple modern formats:
| Output | Description |
|---|---|
csv/{TableName}.csv | One CSV file per table with all row data |
xlsx/{TableName}.xlsx | Excel workbook per table (omitted for tables over 1,048,575 rows, 16,384 columns or 8,000,000 cells - see note below) |
xls/{TableName}.xls | Legacy Excel format per table (omitted for tables over 65,535 rows, 256 columns or 150,000 cells - see note below) |
json/{TableName}.json | JSON array of records per table |
json/{TableName}.jsonl | Newline-delimited JSON (streaming-friendly) |
postgres.sql | PostgreSQL CREATE TABLE + INSERT statements |
mysql.sql | The same schema and rows, in MySQL dialect |
sqlite.sql | The same schema and rows, in SQLite dialect |
ansi.sql | The same schema and rows, in portable ANSI SQL |
sqlserver.sql | The same schema and rows, in SQL Server (T-SQL) dialect |
report.json | Structured conversion report |
report.md | Human-readable conversion summary |
How to Export / Obtain Files
- In the Data Administration tool, dump your schema: Admin > Dump Data and Definitions > Data Definitions (
.dffile) - Dump your table data: Admin > Dump Data and Definitions > Table Contents (
.dfile). In ABL, the equivalent for one table isOUTPUT TO "table.d". FOR EACH table-name NO-LOCK: EXPORT table-name. END. OUTPUT CLOSE. - Create a ZIP archive containing the
.dfand.dtext files - Upload the ZIP archive to DataMeans
Supported Features
- Tables and fields (names, data types and field order) from the
.dfschema - Rows from each table's
.ddump, with numbers and dates read the way the dump says it wrote them (European decimals such as119,5, day-month-year or month-day-year dates) and text in the code page the dump names - Array fields (
EXTENT) become one column per element - A preview of every table before you convert: its columns, the number of records Progress counted in
the dump, and the first rows, read the same way as the conversion. Tables in the
.dfthat have no.din the upload are shown as schema only
Known Limitations
- The binary database and its extents can't be read: dump to
.dfand.dfirst - Very large tables are read whole and held in memory while they convert: a single table of a few hundred megabytes or more may not fit, in which case dump it in parts (one table, or one range of records, per file)
- Indexes, sequences, triggers and stored procedures aren't converted
- Application logic (4GL / ABL code) isn't migrated, only the data
Troubleshooting
| Issue | Solution |
|---|---|
| "No ADD TABLE definitions found" | The .df is missing or empty: dump the data definitions for all tables |
| A table has no rows | Include that table's .d dump in the ZIP |
Note on the Excel formats. An
.xlsxsheet holds at most 1,048,575 rows of data and 16,384 columns, and a legacy.xlssheet 65,535 rows and 256 columns. Rather than ship a file that looks complete but is silently cut short, DataMeans leaves a table out of any Excel format it does not fit and notes it in the job report. The.xlsxcopy is also left out for tables of more than 8,000,000 cells (1,048,575 rows of 12 columns is 12.6 million), which take too long and too much memory to write, and the.xlscopy for tables of more than 150,000 cells, which the legacy format takes far too long to write. The CSV, JSON and SQL outputs always contain every row.
Overview
Progress 4GL (now OpenEdge ABL) is a fourth-generation programming language and database platform developed by Progress Software Corporation. It combines a relational database with an English-like programming language for rapid business application development. The database uses a proprietary format optimized for transactional processing and complex business logic.
History and Background
- 1981: Progress Software founded as Data Language Corporation (DLC) by MIT graduates including Joseph Alsop, Clyde Kessel, and Chip Ziering.
- 1984: First commercial version of Progress ships for Unix.
- 1987: Company renamed Progress Software, after its flagship product.
- 1993: Progress Version 7 adds GUI development for Windows and Motif.
- 1995: Progress Version 8 introduces component-based visual development.
- 1998: Progress Version 9 introduces Type I storage areas.
- 2003: OpenEdge 10 released, the first OpenEdge-branded version, introducing Type II storage areas.
- 2005: OpenEdge 10.1 adds object-oriented language extensions.
- 2006: Progress 4GL renamed OpenEdge ABL (Advanced Business Language).
- 2009: OpenEdge 10.2 released; release 10.2B adds Transparent Data Encryption for data at rest.
- 2011: OpenEdge 11 introduces multi-tenant database tables.
- 2014: OpenEdge 11.5 introduces the Pacific Application Server for OpenEdge (PASOE).
- 2017: OpenEdge 11.7, a long-term support release, introduces Change Data Capture.
- 2019: OpenEdge 12 adds a multi-threaded database server.
- 2022: OpenEdge 12.5 adds an ABL API for Apache Kafka messaging.
- 2024: OpenEdge 12.8 adds Dynamic Data Masking and OpenTelemetry-based application observability.
- 2026: OpenEdge 13.0 released, resolving the year-2038 problem by widening on-disk time values from 32 to 64 bits.
File Format Specifications
Database Files:
.db: Database control area, a binary table of contents listing every area and extent.d1,.d2, etc.: Data extents holding table data, indexes, and LOBs.b1,.b2, etc.: Before-image extents used to undo incomplete transactions.a1,.a2, etc.: After-image extents for roll-forward recovery.lg: Text log file recording significant database events.lk: Lock file created at session startup, recording whether the database is open in single-user or multi-user mode.st: Structure description file, a text file defining the database's areas and extents.tn: Transaction log extents (fixed-length only) listing committed two-phase commit transactions
Storage Architecture:
- Block-based storage with configurable block sizes (1KB, 2KB, 4KB, or 8KB)
- B-tree indexes for fast lookups
- Record-level locking for concurrency
- Default block size of 4KB on Windows and Linux, 8KB on UNIX
- Databases divided into storage areas composed of one or more extents
- Up to 32,000 storage areas per database, of which 31,994 can hold application data
- Up to 1,024 extents per area and 1TB per extent; Type II areas can reach about 1PB with large files enabled
- Records per block configurable in powers of two from 1 to 256, defaulting to 64 for 8KB blocks and 32 for other block sizes
File Structure:
- Schema stored within the database's schema area
- Compiled ABL code in
.rfiles (r-code) - Data dictionary for metadata management
- Audit trails and security settings
- Replication and high-availability configurations
- Limits of 32,767 table definitions and 32,767 indexes per database
- Up to 1,000 fields per table through ABL, or 500 through the SQL engine
- Index entries of at most 16 fields each
Data Types and Structures
| Type | Size | Description |
|---|---|---|
| CHARACTER | Variable | Text strings up to 32KB |
| LONGCHAR | Variable | Character data exceeding the 32KB CHARACTER limit |
| INTEGER | 1-4 bytes | 32-bit signed integers |
| INT64 | 1-8 bytes | 64-bit signed integers (added in OpenEdge 10.1B) |
| DECIMAL | Variable | Fixed-point decimals, up to 50 digits with up to 10 decimal places |
| DATE | 1-4 bytes | Stored as an integer count of days |
| DATETIME | Date + 4 bytes | Date and time in milliseconds from midnight |
| DATETIME-TZ | Date + 8 bytes | Date/time with time zone offset from UTC in minutes |
| LOGICAL | 1-2 bytes | Boolean (yes/no) |
| BLOB | Up to 1GB | Binary large objects |
| CLOB | Up to 1GB | Character large objects |
| RAW | Variable | Raw binary data |
| RECID | 4 bytes | Legacy record pointer; can be stored in database fields |
| ROWID | Variable | Portable record pointer; cannot be stored in database fields |
Database Objects:
- Tables: Primary data containers
- Indexes: B-tree structures for performance
- Sequences: Auto-incrementing number generators (32-bit and 64-bit)
- Triggers: ABL schema triggers and Java-based SQL triggers
- Stored Procedures: Java routines executed by the SQL engine
- Views: Virtual tables defined through the SQL engine
Version Differences
| Version | Year | Key Features | File Format |
|---|---|---|---|
| Progress V7 | 1993 | GUI for Windows and Motif | Pre-storage-area format |
| Progress V8 | 1995 | Visual development; AppServer (8.2) | Single- or multi-volume structure |
| Progress V9 | 1998 | Dynamic queries, Java Open Client | Type I storage areas (CONV89 upgrade) |
| OpenEdge 10 | 2003 | Web services, ProDataSets | Type II storage areas (CONV910 upgrade) |
| OpenEdge 10.1 | 2005 | Object-oriented ABL | INT64 data type added in 10.1B |
| OpenEdge 10.2 | 2009 | GUI for .NET (10.2A); Transparent Data Encryption (10.2B) | Optional encrypted on-disk storage (TDE, 10.2B) |
| OpenEdge 11 | 2011 | Multi-tenant tables | Per-tenant partitions; CONV1011 upgrade |
| OpenEdge 11.7 | 2017 | Change Data Capture | No format change within Release 11 |
| OpenEdge 12 | 2019 | Multi-threaded database server | Conversion from Release 11 required |
| OpenEdge 12.8 | 2024 | Dynamic Data Masking, OpenTelemetry support | No conversion within Release 12 |
| OpenEdge 13.0 | 2026 | FIPS 140-3 support; multi-threaded backup by default | 64-bit time values in master blocks and extent headers (year-2038 fix) |
Compatibility Notes:
- Databases can be upgraded but not downgraded; reverting requires a restore from backup
- The database format changes between major releases; PROUTIL conversion utilities (CONV89, CONV910, CONV1011, CONV1112) upgrade databases in place
- Minor releases share a format; a database created under any Release 11.x can be opened by any other 11.x release without conversion
- Some data types require minimum versions; INT64 fields require OpenEdge 10.1B or later
- Single-volume Version 8 databases must be converted to multi-volume structure before upgrading to Version 9
- Migration utilities are provided for major-version upgrades
Technical References
What can I convert Progress 4GL / OpenEdge databases to?
DataMeans converts Progress 4GL / OpenEdge databases to clean CSV, Excel, JSON & SQL. Each table is exported as its own file, alongside a structured report of exactly what was extracted.
Do I need Progress 4GL / OpenEdge installed to open my databases?
Only to make the dumps. DataMeans reads the text dumps Progress writes (a .df schema file and .d data files), not the binary .db file or its extents, so you need Progress once, to dump the database. After that, you don't need Progress or a license.
Can I preview my Progress 4GL / OpenEdge data before paying?
Yes. DataMeans shows your extracted tables and rows in the browser first, so you only pay when you're ready to download the full CSV, Excel, JSON & SQL export.
Is my data secure?
Yes. Your files are encrypted in transit and at rest, and they're deleted automatically: within 7 days if you don't go ahead with a conversion, and when your download window ends if you do. We never sell or share your data, and we never use it to train machine-learning models.