Skip to content

Releases: nullptrlabs/pgmodeler

v2.0.0-alpha

30 Oct 12:02

Choose a tag to compare

v2.0.0-alpha Pre-release
Pre-release

Changes since: v1.2.x

Attention: pgModeler 2.0.0-alpha introduces configuration changes that may affect compatibility with 1.x settings. On the first launch, pgModeler will automatically attempt to migrate your existing settings. Please note that this is an early development release where stability issues may occur. It is recommended that all models and databases be backed up before use. Please report any bugs found for prompt resolution. The mentioned migration process helps transition to improved configurations while minimizing disruption to your workflow.

Summary: After five months of work on the first development iteration of the next major release, I proudly present to you pgModeler 2.0.0-alpha. The goal of this release was exclusively to improve the overall user experience by adjusting several UI components in the hope of making usage more comfortable and pleasant. Of course, this version does not include all the intended changes, as they will be slowly introduced during the development process of 2.0 until the stable release is reached. But great things are coming to pgModeler, not only UI changes but also some cool features that have been awaited for a long time! Below are some of the detailed changes in this version; for more detailed/technical information about them, please refer to the CHANGELOG.md file.

Build system changes: Since its early days, pgModeler has relied on qmake, Qt's build system, for the compilation process. Due to some particularities of the pgModeler project itself and some limitations in qmake, it was often necessary to create workarounds to facilitate the compilation of the tool on all three main OSes. This was increasing the complexity of the build scripts, making them difficult to maintain. So, the first step taken when starting the pgModeler 2.0 development was the complete migration from qmake to CMake. CMake is another build system widely used across the open-source world, with a great feature set that makes it the right choice for projects that are constantly growing, like pgModeler. This migration to CMake is not backward compatible with qmake, which means that pgModeler can no longer be compiled using qmake.

Major UI change: As in the previous major release (1.x), this one brings a refreshed UI. Despite still being a work-in-progress that will be finished by the stable 2.0 release, this first iteration of UI adjustments includes a small redesign of the project logo and UI icon colors. The idea is to create something flatter and more colorful. Another change in this alpha release is the integration of the configuration form, as well as the tool forms (diff, import, export, and fix), into the main window for a more fluid experience, reducing the number of modal dialogs in the tool, which could be very frustrating in several usage scenarios. The next UI adjustments will include the redesign of model object editing forms and many other elements.

Improved diff tool: In addition to the UI adjustments, the diff tool received a new comparison mode: model-to-model comparison. This mode allows users to perform offline comparisons between two loaded database models and generate the corresponding SQL diff code for later application on a database server. This feature will serve as a bridge to a more enhanced version of the diff tool, which will be capable of creating, deleting, and updating objects in the right-side model based on the comparison results. Future releases will provide a preview of this functionality. Another improvement added to the diff tool is the ability to select any loaded model from a combo box for use in the diff process. In previous versions, due to the modality of the diff tool dialog, only the currently focused model in the design view could be used as the input model. Now, users are free to select any loaded model as the input and/or comparison model.

Improved import and export tools: Like the diff tool, the import and export tools have undergone UI adjustments that involved removing some components and relocating others to enhance the user experience. One of the key changes is the ability to freely select the models on which these operations will be performed. This differs from previous versions, which only allowed the currently focused model to be handled.

v1.2.2

17 Oct 17:12

Choose a tag to compare

Changes since: v1.2.1

This patch release for pgModeler 1.2.x brings the following improvements and fixes:

  • [New] Added initial support for PostgreSQL 18.
  • [Change] Refactored the result set handling, avoiding potential memory leaks.
  • [Fix] Fixed a bug in XML parsing that was not configuring the DTD file path correctly.
  • [Fix] Fixed a bug that was causing the collation object assigned to a column not to be reflected in SQL and XML codes.
  • [Fix] Fixed a bug that was causing collation objects to be saved always as deterministic, even when the user unchecked the option in the editing form.
  • [Fix] Fixed the database server version parsing routine so the default version can be used as a fallback when a major server version is not yet recognized by the tool.

v1.2.1

29 Aug 18:02

Choose a tag to compare

Changes since: v1.2.0

This patch release for pgModeler 1.2.x brings the following improvements and fixes:

  • [Fix] Fixed a bug in model validation that could lead to a crash when validating foreign tables.
  • [Fix] Fixed a bug that was causing columns that were part of PKs not to be removed by the user's request.
  • [Fix] Fixed the constraint's catalog query in PostgreSQL 17.

v1.2.0

09 May 11:45

Choose a tag to compare

Changes since: v1.1.0

Attention: pgModeler 1.2.0 introduces configuration changes that may affect compatibility with 1.1.x settings. On the first launch, pgModeler will automatically attempt to migrate your existing settings. Please note that this is an early development release where stability issues may occur. It's recommended that all models and databases be backed up before use. Please report any found bugs for prompt resolution. The mentioned migration process helps transition to improved configurations while minimizing disruption to your workflow.

Summary: After one year and three months, 72 new features, 93 changes/improvements, and 74 bug fixes were delivered to this new major release. The result of this hard work is an even more optimized tool with features that will make a difference in any aspect of database modeling and administration! Below, we have a compilation of key new features, changes, and fixes implemented since pgModeler 1.1.0. Of course, some more technical changes were omitted, but you can see everything in the file CHANGELOG.md.

New features

  • Improved debug mode: The debugging capabilities have been expanded with dedicated output tabs in the database import and diff forms. Now, every time the user checks the debug mode option in any of the mentioned forms, a new tab will be displayed, and any useful information that helps to track down errors/bugs will be logged there.

  • Multiple objects source preview: To make the code preview more flexible, the user can now visualize the source code of multiple selected objects in the canvas or the database objects tree. When using this feature, the code in the source code preview widget will be displayed in the order in which the objects are created. This feature is useful when you need the code of a small portion of the model and don't want to generate the whole code just to extract the desired parts of it.

  • Relationships' FK columns indexes: Now, the relationships that automatically create foreign key columns can also create indexes over those columns too. This can speed up the modeling process a bit more. The generated indexes, like relationships, are named after the specific pattern and the user has total control over the generated names in the relationship editing form or by defining a global name pattern under relationships settings.

  • Improved layers setup: The operation to move objects to certain layers was significantly improved in this version. Now, the quick action "Quick > Set layers" opens a dialog where the user can move the selected objects to one or more existing layers or even create a layer on the fly and assign it to the selection in the design view. In addition to that improvement, the layers configuration widget (the one that is toggled by the button "Layers" at the bottom of the design view) received an option that makes relationships follow the visibility of the linked tables. This means that if one table is moved to a layer, the relationships connected to it will move to that layer too.

  • Transactional export process: The export process is now capable of running the commands at once inside a transaction block. This is useful if you want an atomic execution of the generated DDLs, rolling back everything if one command fails in its execution. Note that the transactional option does not affect database and tablespace creation commands, since, by design, these commands need to be executed outside a transaction. The command-line interface tool also received support for the transactional export process, and it's enabled by default, like in the GUI. To deactivate it during the execution of any export operation, use the options -nt or --non-transactional.

  • Improved code completion: The code completion widget now supports the completion of names in ALTER/DROP commands. It even detects the type of objects being modified or dropped, suggesting the names filtered by the specified types. Another enhancement done is the capability of displaying column names in the ORDER BY clause.

  • Tabbed data handling: Before this version, data manipulation was performed via a standalone dialog, which could make data handling more difficult due to the number of standalone windows open. Now, all browsed tables are reunited in a single dialog but are displayed in their own tabs, facilitating data visualization.

  • Improved schema microlanguage: The pgModeler's code templating language (aka schema microlanguage) was improved in such a way as to support escaped character sequences that refer to metacharacter tokens. The supported escaped characters (and their related metacharacters) are \s ($sp), \t ($tb), \n ($br), [ ($ob), ] ($cb), { ($oc), } ($cc), $ ($ds), # ($hs), % ($ps), @ ($at), & ($am), \ ($bs) and * ($ds). The schema language now also supports the "include" statements that inject portions of code stored in other files into the currently parsed schema file. This is pretty handy for avoiding code duplication and facilitating the maintenance of schema files.

  • Markdown data dictionaries: pgModeler now supports the generation of data dictionaries in Markdown (.md) format in the model export form. This is useful to integrate data dictionaries generated by the tool with other documentation tools that use that file format to keep documentation pages. The pgmodeler-cli tool also received support for Markdown dictionaries through the option "--markdown".

  • Improved older configs copy: From now on, in the first run, pgModeler will try to copy the configuration files from a previous major version immediately before the current one. For example, running 1.2, the files to be copied will be from 1.1 and not from 0.9.x anymore. This will increase the chances of reusing settings from previous versions, diminishing the annoying situation of reconfiguring the tool every time it is updated.

  • Improved code generation: The DDL generation for objects that support "CREATE OR REPLACE" was updated to include the "OR REPLACE" portion; this is the case for functions, procedures, views, and others. The diff feature received the option "Replace modified objects", which causes objects to be replaced via "CREATE OR REPLACE" instead of being dropped and created again.

  • Quick create constraints, indexes, and relationships: This feature, introduced through an exclusive plugin in pgModeler Plus, allows the creation of constraints, indexes, and relationships based on the objects selected in the design view, without the need to open a single editing form or fill lots of fields. The objects created also support name patterns, and they can be configured in the plugin's settings menu in the main window.

  • Query variables plugin: pgModeler Plus received a new plugin that helps developers test their queries using variables that are replaced in the command at the moment of its execution. Basically, a query that contains some variables prefixed by $, like this "SELECT $cols FROM $schema.$table WHERE $condition", has the values for each variable replaced and the parsed query executed. The variables and their values can be specified in a special widget that is toggled by the button "Variables" in the SQL execution widget. The main goal of this new feature is to accelerate the query testing, mainly if you write parametrized queries based on some ORMs' syntaxes. This plugin supports four variable formats: $variable, :variable, @ variable, and {variable}.

  • Improved plugin API: The pgModeler's plugin development interface was improved and now allows more portions of the tool to receive user-created features to increase its set of functionalities. Unfortunately, for now, you still need a basic knowledge of C++ and Qt. But for future releases, I plan to simplify even more the plugin interface in such a way as to allow non-C++ developers to create their custom features for pgModeler.

  • Removal of the support for Qt 6.2 and 6.3: The support for Qt versions 6.2 and 6.3 was removed since it was causing a lot of conditional compilation instructions (the famous C/C++ macros) to be used. This approach tends to make the code hard to read and maintain. So, since Qt 6.2 and 6.3 official upstream support has ended, we decided to make the code compliant with newer framework versions. To be more precise, pgModeler now builds on Qt 6.4.x and above.

Miscellaneous

  • Added support for PostgreSQL 17.
  • Improved the reverse engineering so columns can also be imported using the option "Import to the working model" in the database import form.
  • Graphical objects added to the canvas area will now blink, and the viewport will center on them to indicate to the user where they were put.
  • Adjusted pgmodeler-cli to raise errors when the ignore export error options are used in transactional export mode.
  • Minor adjustment in diff form by making transactional mode mutually exclusive with the ignore export errors option.
  • Minor fix in the file selector widget that was not applying correctly the palette colors in the line edit field.
  • Minor fix in extensions creation/loading processes by ignoring duplicated schemas and using the ones already available in the model.
  • Fixed a bug in the data dictionary generation for views.
  • Fixed a bug in the SQL generation of the database model SQL related to an unknown database attribute.
  • Fixed a bug when importing composite types having attributes using arrays of other user-defined types.
  • Fixed a bug when displaying the source, in Database Explorer, of a composite type that has one or more attributes referencing user-defined types.
  • Fixed a bug that was generating errors when running catalog queries of some objects in older versions of PostgreSQL.
  • The model objects widget now accepts an Alt + click over a graphical object, highlig...
Read more

v1.2.0-beta1

31 Mar 22:17

Choose a tag to compare

v1.2.0-beta1 Pre-release
Pre-release

Changes since: v1.2.0-beta

Attention: pgModeler 1.2.0-beta1 introduces configuration changes that may affect compatibility with 1.1.x settings. On the first launch, pgModeler will automatically attempt to migrate your existing settings. Please note that this is an early development release where stability issues may occur. It's recommended to back up all models and databases before use. Please report any bugs found for prompt resolution. The mentioned migration process helps transition to improved configurations while minimizing disruption to your workflow.

New features

This release introduces several enhancements to improve database modeling workflows. The SQL source code editor now offers per-instance control line wrap along with an integrated search/replace widget. Debugging capabilities have been expanded with dedicated output tabs in the database import and diff forms. The diff feature restored the force object re-creation support in both CLI and GUI, but now with a type selection popup menu for fine-tuned object re-creation. The database model now provides finer control over SQL generation by allowing the disabled SQL code to go into the generated scripts. The extension object handling has been upgraded for better child object management (currently, only children types and schemas are tracked). The system objects can now have permissions assigned.

Changes and enhancements

The model objects widget now accepts an Alt + click over a graphical object, highlighting it in the design view. Redundant search/replace instances all over the tool were removed due to the integrated search/replace widget in the source code editor. The extension editing form now properly supports custom schema names in data types, while the database import process and the database model itself have been refactored for more reliable handling of extension-owned objects using the new extension object structure. The comparison operations in the diff process have been optimized to filter system objects correctly, and the function behavior type was simplified by dropping the STRICT type since it has the same semantics as RETURNS NULL ON NULL INPUT. The database import form, when in debug mode, will remain open so the user can inspect the commands and objects created during the process.

Bug fixes

  • Fixed some crashes during diff operations on extension-created tables.
  • Fixed the importing of columns using arrays of user-defined types.
  • Fixed the time zone persistence on the timestamp data type.
  • Removed false-positive diffs for functions with comments or STRICT behavior.
  • Fixed reverse engineering of uppercase type names.
  • Addressed crashes in identifier relationships with FK indexes.

v1.2.0-beta

10 Feb 17:42

Choose a tag to compare

v1.2.0-beta Pre-release
Pre-release

v1.2.0-beta

Changes since: v1.2.0-alpha1

Attention: Some configuration files were changed in pgModeler 1.2.0-beta causing a break in the backward compatibility with some pgModeler 1.1.x settings. This way, at the first start of the newer version, pgModeler will automatically try to migrate the older settings to the newer ones! Be advised that this is a release of a version in the early stages of development. Bugs, malfunctioning, crashes, and other problems are expected and will be resolved as soon as they are reported. Make sure to make backups of your models and databases before using this version!

After almost 4 months since the release of the last development version of 1.2.0, here we are announcing its first beta! This means that 1.2.0 has reached its final shape and from now on I will work exclusively on fixing bugs and polishing the new features that will be arriving in the stable version! Below some new features and changes are detailed.

  • Relationships' FK columns indexes: Now, the relationships that automatically create foreign key columns, can also create indexes over that columns too. This can speed up a bit more the modeling process. The generated indexes, like relationships, are named after the specific pattern and the user has total control over the generated names in the relationship editing form or by defining a global name pattern under relationships settings.

  • Quick create constraints, indexes, and relationships: This feature, introduced through an exclusive plugin in the paid version of the tool, allows the creation of constraints, indexes, and relationships based on the objects selected in the design view, without the need to open a single editing form or fill lots of fields. The objects created also support name patterns, and they can be configured in the plugin's settings menu in the main window.

  • Miscellaneous:

  • [New] When the export, import, and diff processes finish, the taskbar blinks when the window is not visible.

  • [New] Added support for the total number of rows in the table being handled in the data handling form.

  • [Change] Set new icons for tree widgets collapse and expand actions.

  • [Change] Updates on icons-*.conf files.

  • [Change] Minor layout adjustment in the data handling form.

  • [Change] Minor adjustment in the layers configuration widget to accept Enter/Return to apply settings.

  • [Fix] Fixed some shortcut conflicts in the main window.

  • [Fix] Minor fix in the "Open relationship" action in the design view.

  • [Fix] Fixed the index catalog queries when using pgModeler in compatibility mode (PG 9.x).

  • [Fix] Minor fix in buttons' drop shadows in data handling form.

v1.1.6

22 Dec 15:21

Choose a tag to compare

Changes since: v1.1.5

This patch release for pgModeler 1.1.x brings the following improvements and fixes:

  • Fixed a bug in the FK relationships update routine that was causing more relationships to be deleted than what really needed to be.
  • Fixed a crash when creating a many-to-many relationship where one or more columns of the involved primary keys use generated default values (GENERATED AS).
  • Fixed a bug in the routine that updates relationships' generated objects that was causing the application to hang up when importing a simple hierarchy of tables.

v1.1.5

28 Oct 14:48

Choose a tag to compare

Changes since: v1.1.4

This patch release for pgModeler 1.1.x brings the following improvements and fixes:

  • Added support for PostgreSQL 17.
  • Fixed the catalog queries of collation and domain objects for PostgreSQL 17.
  • Disabling objects' grids in TableWidget when the edited table is protected.

v1.2.0-alpha1

25 Oct 12:37

Choose a tag to compare

v1.2.0-alpha1 Pre-release
Pre-release

Changes since: v1.2.0-alpha

Attention: Some configuration files were changed in pgModeler 1.2.0-alpha1 causing a break in the backward compatibility with some pgModeler 1.1.x settings. This way, at the first start of the newer version, pgModeler will automatically try to migrate the older settings to the newer ones! Be advised that this is a release of a version in the early stages of development. Bugs, malfunctioning, crashes, and other problems are expected and will be resolved as soon as they are reported. Make sure to make backups of your models and databases before using this version!

It took almost 4 months but here we are glad to deliver to the community pgModeler 1.2.0-alpha1 which bundles 24 new features, 23 improvements, and 15 fixes since the release of the previous alpha. This time, some important decisions were taken to make the code base a bit less complicated to maintain, at the same time some other portions of the tool were refactored to allow the plugin development to be more flexible, and, of course, we are bringing some new features. The key improvements and fixes are described below:

  • Improved layers setup: The operation to move objects to certain layers was significantly improved in this version. Now, the quick action "Quick > Set layers" opens a dialog where the user can move the selected objects to one or more existing layers or even create a layer on the fly and assign it to the selection in the design view. Additionally to that improvement, the layers configuration widget (the one that is toggled by the button "Layers" at the bottom of the design view) received an option that makes relationships follow the visibility of the linked tables. This means that if one table is moved to a layer the relationships connected to it will move to that layer too.

  • Transactional export process: The export process is now capable of running the commands at once inside a transaction block. This is useful if you want an atomic execution of the generated DDLs, rolling back everything if one command fails in its execution. Note that the transactional option does not affect database and tablespace creation commands, since, by design, these commands need to be executed outside a transaction. The command-line interface tool also received support for the transactional export process and it's enabled by default like in the GUI. To deactivate it during the execution of any export operation use the options -nt or --non-transactional.

  • Improved code completion: The code completion widget now supports the completion of names in ALTER/DROP commands. It even detects the type of objects being modified or dropped suggesting the names filtered by the specified types.

  • Tabbed data handling: Before this version, data manipulation was performed via a standalone dialog, which could make data handling more difficult due to the number of standalone windows open. Now, all browsed tables are reunited in a single dialog but lying in their own tabs, facilitating data visualization.

  • Query variables plugin: The paid version of the tool received a new plugin that helps the developers test their queries using variables that are replaced in the command at the moment of its execution. Basically, a query that contains some variables prefixed by $ like this "SELECT $cols FROM $schema.$table WHERE $condition" has the values for each variable replaced and the parsed query executed. The variables and their values can be specified in a special widget that is toggled by the button "Variables" in the SQL execution widget. The main goal of this new feature is to accelerate the query testing mainly if you write parametrized queries based on some ORMs syntaxes. This plugin supports four variable formats: $variable, :variable, @ variable, and {variable}.

  • Removal of the support for Qt 6.2 and 6.3: The support for Qt versions 6.2 and 6.3 was removed since it was causing a lot of conditional compilation instructions (the famous C/C++ macros) to be used. This approach tends to make the code hard to read and maintain. So, since Qt 6.2 and 6.3 official upstream support has ended, we decided to make the code compliant with newer framework versions. To be more precise, pgModeler now builds on Qt 6.4.x and above.

  • Improved plugin API: The pgModeler's plugin development interface was improved and now allows more portions of the tool to receive user-created features to increase its roll of functionalities. Unfortunately, for now, you still need a basic knowledge of C++ and Qt. But for future releases, I plan to simplify even more the plugin interface in such a way as to allow non-C++ developers to create their custom features for pgModeler.

  • Miscellaneous:

    • Added support for PostgreSQL 17.
    • Added support for displaying FK's update/delete actions in the data dictionary.
    • The file selection dialog now starts on the user's home by default and saves that last accessed directory, using it the next time it is opened.
    • Minor bug fix in code generation of tablespace, database, and user mapping objects.
    • Minor fix in the object search feature when searching by source/referenced constraint columns.
    • Minor fix in objects' grids to allow sorting the "ID" column as an integer value.
    • Fixed a bug in function editing form that was not resetting "SETOF" flag when changing the return mode to "Table".
    • Fixed a malformed markdown code when a table or view had a comment.
    • Fixed a bug in diff process that was ignoring changes in columns.
    • Fixed a crash in the database import process when destroying detached inherited columns.
    • Fixed a bug in database import that was crashing the application while trying to retrieve user mapping comments.
    • Fixed a bug in the index object that was preventing the removal of included columns.

v1.1.4

21 Aug 20:39

Choose a tag to compare

Changes since: v1.1.3

This patch release for pgModeler 1.1.x brings the following improvements and fixes:

  • Fixed a bug in the function object that did not reset the SETOF flag when changing the return type to TABLE.
  • Fixed a crash in the database import process when destroying detached inherited columns.
  • Fixed a bug in the system catalog query class that was crashing the application while trying to retrieve user mapping comments.
  • Fix a bug in the index object that was preventing the removal of included columns.