I'm glad to annouce pgModeler 0.9.4-beta!
Improving even more what was already really great.

ATTENTION: the database model file structure has changed since the last stable 0.9.3. Models created in older releases will certainly fail to load due to incompatibilities because some attributes in the XML code don't exist anymore or have changed during the development of 0.9.4-beta. Before loading your database models in this new release, please, make sure to have a backup of them and follow the steps presented by the model fix tool to correct the documents' structure. Not paying attention to this situation may cause irreversible data loss! If the fix procedures aren't enough to make your database models loadable again, please, ask for help at the official support channels!

First of all, I want to apologize for the delay in launching this version. I was intending to finish it in one month but it took twice the time, just because a few days after releasing pgModeler 0.9.4-alpha1, I had to make a surgical procedure on my right hand due to carpal tunnel syndrome needing to rest for twenty days before I could resume my work on pgModeler. Fortunately, I had some work finished for 0.9.4-beta before my surgery, so after my doctor discharged me, all I had to do is to make some small tests here and there.

Well, absence properly justified, let's talk about this new version. If you follow this project for a long time and like to read changelogs as I do, will notice that there's nothing too revolutionary to be shown because all beta releases are aimed to improve everything that was made in previous versions of the current development timeline. Anyway, the enhancements brought can help you in your daily job with pgModeler.

Adjust role memberships through diff process

pgModeler now supports the generation of GRANT and REVOKE commands to (re)configure role memberships in the diff process. Basically, you have to use the role editing form to set up the desired memberships of a certain role and then all the magic will be made by the diff. Due to the introduction of this new feature, there was the need to change the role form. The tabs were reordered and some renamed to give better semantics. Additionally, the tab "Member of" needed to be modified in order to make the diff generation more precise.

The tab Members lists the roles that are members of the role being edited, this represents the instruction ROLE role1, role2 .... The tab Admin option lists the roles that will receive the right to grant membership in the handled role to others, this is what the instruction ADMIN role1, role2 ... does. Finally, the tab Member of , in previous versions, was used to configure the roles in which the one being edited was part, generating the instruction IN ROLE role1, role2 .... But in pgModeler 0.9.4-beta, we had to abandon the IN ROLE generation due to some problems it was causing for the generation of diff scripts, so now, when adding roles in this tab pgModeler will simulate the behavior of IN ROLE but in practice, no such code will be generated, instead, the role handled in the form will appear in the instruction ROLE of the ones listed in Member of tab. The only limitation of this change is that the role postgres can't be used for now in the tab Member of since it can't be handled directly by the user in pgModeler.

Indexes now support non-key columns

Non-key columns, as stated in PostgreSQL docs, can be used to make effective use of index-only scans, by choosing to create a covering index, which is an index specifically designed to include the columns needed by a particular type of query that is run frequently. Since queries typically need to retrieve more columns than just the ones they search on, PostgreSQL allows one to create an index in which some columns are just "payload" and are not part of the search key. This is done by adding an INCLUDE clause listing the extra columns. This new pgModeler version brought a simple interface to configure non-key columns in an index, as shown below.

This feature opened the path to the possibility to reference view columns in other objects. For now, it's possible to use view columns on their own indexes, but the plan is to allow views to reference columns of each other in order to make the code generation even more powerful. The only downside of this new ability is that pgModeler isn't yet able to keep track of name changes in view columns, so each time a view column name is changed you have to check all objects that use it and make the proper modifications, not forgetting to always validate the model.

Miscellaneous changes and fixes

As I said, this release is focused on improving everything that was made before, so below we have a small set of changes and bug fixes that are worth mentioning. For the complete list of changes of pgModeler 0.9.4-beta, please, take a look at the file CHANGELOG.md.

  • The pgmodeler-cli tool now has a fix step to reconfigure roles membership considering the deprecation of the previous behavior of "Members of".

  • Attending some users' requests now there's the possibility to toggle update notifications regarding alpha and beta versions. This behavior can be adjusted in general settings.

  • In the database explorer widget (in SQL tool) the collapsing state of the objects' tree is preserved even after refreshing the whole tree due to create and delete operations.

  • Now, when renaming an object through the object rename widget, the name field comes pre-filled with the object's name in the first show when a single object is selected for renaming. The object rename widget can be triggered by selecting objects in the design view and hitting F2.

  • Due to the new roles membership configuration feature, you can now swap cluster level object ids (roles and tablespaces) in the object swap form when the objects to be swapped are of the same kind.

  • In order to be PostgreSQL compliant, the default match type of foreign-key constraints was changed to MATCH SIMPLE.

  • The database model changelog widget now displays the first modification date.

  • A crash in the swap objects widget was fixed when the user tried to swap objects using arrow keys.

  • The diff form was patched in such a way to allow the use of Return/Esc keys to respectively run the diff and close the dialog.

  • The code generation of aggregates was fixed and now the DDL command is properly created when these objects use functions that contain parameters in which data type have spaces (double precision, character varying, and so on).

  • Fixed a segmentation fault that could happen when the user tried to change the number of parameters of a function already associated with an aggregate.

Well, that's it. From now on, until the release of stable 0.9.4 (planned to later this year, specifically in December), I'll work even more on bug fixes and small changes just to make the preparation for pgModeler 1.0 that I'm really excited to start working on. In the meantime, I'll be waiting for your feedback on this new version.

Oh, and before I forget, pgModeler needs your help. As you may know, this project doesn't have any sponsorship and the already humble financial resources incoming had diminished a lot in this pandemic so each release is brought to you due to a huge effort and love that I have for this project and its community. Thus, if you can help me and this project, please, make a donation, any amount is appreciated. Thanks in advance! :D

Take care and until next time!

Comments (0) Add a comment

Add new comment

  • 0/1024