Hey there! The last 4 months were a bit complicated for me due to some personal problems, mainly the health ones that slowed down my work on pgModeler. Fortunately, I had enough time to recover and now that I'm 100% restored, I'm really excited to announce a new release of pgModeler, especially when it involves the introduction of new features that I hope can make more users adopt the tool or enhance the productivity of those who already work with it for years. Having said that, let's take a look at what's new on 1.2.0-alpha!
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 layers on the fly and assign them to the selected objects 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, being hidden or displayed depending on the layer's visibility state.
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. This feature is also available on the diff process in the export to DBMS step, under the options group Export options
.
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
and DROP
commands. It also 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 standalone dialogs, which could make data handling more difficult due to the number of windows open. Now, all browsed tables are reunited in a single dialog but lying in their own tabs, facilitating data visualization. By the way, you still can use separate windows to handle tables' data by clicking the button or hitting Ctrl+N
.
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}
.
The button Copy parsed
copies to the clipboard the resulting query after parsing the original one replacing the variables by their values. Now, theExtract
button performs a scan in the original query looking for variable patterns, and, once found, puts each result in the variables grid so the user can specify test values for them. The button Options
holds a dropdown menu containing two options. The first one, Empty values translate to NULL
, causes empty-valued variables to be replaced by the keyword NULL
. The second option, Escape quoted values with E''
, forces the use of the special string quoting syntax that allows the use of C-Style constants within strings.
In the variables grid, we have the column Variable
, which is the variable's name. Note that despite the variables in the original query being suffixed by a special character (e.g. $
, @
, :
) there's no need to include that suffix in the variable name. During the query parsing, pgModeler will automatically prepend the accepted suffixes in the variable names and replace them accordingly. Also, duplicated variable names in the grid are accepted but only the first value will be considered during the parsing. The column Value
holds the variable's value that will be replaced in the original query. Beware that this field is completely free of any validation, the user is responsible for any character formatting and/or escaping. Data type values or even SQL keywords are accepted in this column. Finally, the column Quoted
, is a convenience feature that automatically encloses the value of the respective column in quotes (this is affected by the option Escape quoted values with E''
).
Removal of the support for Qt 6.2 and 6.3
The support for Qt versions 6.2 and 6.3 was removed. This was part of the codebase refactoring for simplified maintenance. Using such old versions of the framework was forcing the use of lots of conditional compilation instructions (the famous C/C++ macros). 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, I decided to make the code compliant with newer framework versions. So, to be more precise, pgModeler now builds mandatorily on Qt 6.4.x and above.
Improved plugin development 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. You can get more details about plugin development in the official docs.
Miscellaneous
Below are some extra key miscellaneous changes, improvements, and fixes. For the complete list of changes in pgModeler 1.2.0-alpha1, please, take a read in the file CHANGELOG.md file.
- 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 the function editing form that was not resetting the
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.
Let's support pgModeler?
If you like the work being done to create a quality database design tool, please become our sponsor on GitHub. Any open-source project needs financial support to keep the development alive, and this is not different with pgModeler. Go ahead, be a supporter in one of the offered sponsor tiers, and receive rewards for being a friend of an open-source project! :D
Now it's your time to interact and send your feedback about this version. Feel free to report bugs or request new features on GitHub. If you just want to show how much you like pgModeler or say "Hi!" to its author, use the comments section below. I'll be happy to reply to everybody! Finally, fresh news about pgModeler can be retrieved from the project's social networks (X, Mastodon, Bluesky) or telegram channel @pgmodeler.
Now that we ended the alpha cycle for 1.2.0, I'll slow down the work a bit to start updating the docs for that new major version. This will give time for the users to test the tool enough so they can report bugs and request features for 1.2.0-beta.
Well, that's all! See you in the next release! ;)
Enjoy pgModeler.
Add new comment