As I promissed (with a small delay) we have the last beta of 0.9.2 ready! My main goal on this release was to bring foreign tables support. Now, after a long waiting, pgModeler can handle all foreign objects correctly. I'm really glad with this release because I can see pgModeler turning itself into an even more solid and reliable product. I know that there's always room for improvements and that's what I'm constantly seeking... a well polished software! I think I'm succeeding on that matter since I'm receiving lots of positive feedbacks and that really makes me proud of this hard work! Now, let's see some of the key features of this version.
Foreign tables support
In order to make pgModeler handle this kind of object I needed to change a lot of details on its core so I could reuse some code making things less complex to maintain, this because foreign tables are almost like the ordinary tables with small differences here and there, so since all the code to manage tables was ready I've made some adjustments to include foreign tables too.
Foreign tables are supported by some features that involve tables somehow, being them:
_1) Relationships: _ currently only inheritance and partitioning can be used with foreign tables due to a limitation on PostgreSQL that prohibits a foreign table to use foreign key constraints (the basis of 1-n relationships).
2) Views: now foreign tables can be referenced by views as it happens to tables without a single difference.
3) Reverse engineering: foreign tables are now fully recognized by the import feature and you can recreate from a running database all foreign objects hierarchy including foreign tables.
4) Diff: the diff feature is now capable of detecting differences between two foreign tables and create the related commands in order to reflect that difference in a database server.
5) Other features: as I told there was so many changes that if I start to detail all them in this post it would be a long reading so, in resume, operations on the canvas supported by tables like copy, cut, duplicate, fade in/out and much more are also supported by foreign tables (remember the similarity between the two object kinds?).
Finally, the form to create foreign tables are practically the same as the one used to create tables except that the first object doesn't support indexes, rules, policies and partition keys. So, if you already familiar with table editing dialog it'll be no challenge for you to use the foreign table editing dialog.
One of the main requests from the users was that pgModeler could save the last settings used during a diff session. Well, I gone further and added the support to diff presets which allows you to save different settings and reuse them whenever you need. This is useful when you need to run the diff process in every stage of your software, let's say, development, homologation and production. On each of these stages you may use different diff settings depending on your needs. For instance, in development and homologation you can force the recreation of objects or even drop objects in cascade mode, but the same options can't be used in production stage for security reasons. So, with this new feature, pgModeler allows you to flexibilize the options used in the diff for different contexts.
Objects swapping improvements
The objects swapping dialog received an small patch that allows the user to move objects freely to the desired position in the creation order. To do so just select an item in the list of objects and hit
Ctrl + Up or
Ctrl + Down to move it up or down respectively. Doing this will cause the object right above or below to swap positions with the selected one. Remember that any modification on this dialog need to be validated prior saving the model or exporting it to a database server.
Miscellaneous changes and fixes
As always, despite the main focus of this release, lots of things were fixed or improved. The first one was the addition of an option that forces the objects' comments to be escaped in the format
E'comment\nwith\nline\nbreaks' making multilined comments be presented as single lines but without changing their semantics. The advantage of this approach is to have a more compact SQL code.
The CSV loading process was improved as well and now supports the parsing of files in which the text delimiters and value separators are escaped. There's an explanation about the problem and the solution here.
pgModeler now validates the dialogs geometry regarding to the screens geometry in order to avoid their appearance in an invalid position (out of range). This problem happens when you were using pgModeler on a larger screen and switch to an small monitor. The previous dialogs positions and sizes are now invalid on the new screen due to the different screen size. This way pgModeler validates the dialog geometry before display it and when an invalid dimension is detected then it'll be displayed on its default position and size.
Due to some permissions problems on Windows systems the mime type update during pgModeler installation was disabled. So, for now on, in order to associate
.dbm files with pgModeler executable you have to use
pgmodeler-cli --update-mime command as described here.
The data manipulation form was enhanced in such way that it'll keep hidden the columns according to the user's choice when the data of a table is retrieved or filtered. In previous versions of pgModeler, the columns visibility was restored to their defaults when refreshing the results display even when the table being browsed wasn't changed. Now, the tool is capable of persisting the visibility state of the columns if you are refreshing the results or filtering them, if and only if, the current table being handled doesn't change.
The diff feature was fixed and now the false-positive results when doing the diff between two functions that contains the same signature doesn't happen anymore. This will reduce the noise in the produced diff code improving the reliability of that process.
Well, I think that's its! There's much more fixes and changes detailed in the CHANGELOG.md so I invite you to take a quick reading on it to be aware of all improvements of this release. Now, the next step is to work only on bug fixes so the stable 0.9.2 can be ready still on December!
Until next time! ;)