I have been using the trial version of DataGrip for nearly a month now, and I can say that I am pretty much "okay" with it. It isn't my favorite database management tool, but it's far from the worst one I've used. I have been using PGAdmin III for several years, but my company is currently in the process of upgrading our PostgreSQL databases to v11, which is no longer supported by PGAdmin III. In fact, PGAdmin III will not even connect to a v11 PostgreSQL server, even after throwing several errors while trying. I've tried using the new PGAdmin 4, but I honestly don't care for it at all, which is why I'm looking into finding an alternative so I can continue managing our databases.
So far, I'm getting used to DataGrip and finding that it can be a really useful tool for managing my databases, and I do actually like it quite a bit. It really seems, however, that this tool was designed for a software developer/programmer rather than a database administrator (luckily for me, I do a bit of both). These annoyances are not necessarily "deal breakers", but they are driving me to look at other solutions. I plan to continue using DataGrip through the evaluation period to see how impactful they are to my daily operations before making a final determination as to whether or not I will be purchasing a license.
I love the fact that with DataGrip I can connect to and manage multiple different types of database servers from a single interface. I actually have to manage both PostgreSQL and MySQL databases, with the occasional SQLite and potentially other types of databases. The database diagramming options appear to be great, although I haven't had a lot of opportunity to really dive into those yet. I've already had reason to use the refactoring tools, and those appear to work very well.
There are, however, a few issues that I've encountered while using DataGrip. Because I'm still just trying it out for the first time, it is possible that I'm overlooking something, so please feel free to correct me if I'm wrong. Here is my list, in no particular order:
- I've yet to figure out how to check the current value of a sequence (PostgreSQL) directly from the UI without running a separate query. This is something that I actually use fairly frequently, and the lack of this feature is somewhat problematic. Here is an example of what I am used to seeing in PGAdmin III:
Note here that I can see all the details about the sequence, including the current (START) value. Because I'm not only managing our database, but also doing a significant amount of programming against that database, this information can be important when I make a programming error that causes the sequence to do strange things or not get used at all. In comparison, I've tried a couple of ways to get this information in DataGrip, but without success. I've tried the options to "Generating DDL to Console", the "Source Editor", as well as the "SQL Generator", but none of them provide the level of detail I am looking for. All I end up with is the following:
Notice that it does not show me the current status of the sequence.
- In addition to the lack of sequence status details, another "missing" element is the current ACL/permission detail for an object. Using the sequence above as an example, you can see that, even though DataGrip shows the current ownership, it does not show any of the other permissions granted (or revoked) for the object. This is apparently true for all objects viewed through the DataGrip UI. Due to the nature of some of the data in our database, we have set up a number of "security groups" on the server to which our employees are assigned for their job functions. Ensuring that new database objects have the correct permissions set has caused me headaches over the years, so not being able to see this information at a glance is troublesome to me.
- While I definitely like the auto-fill/"Intellisense" feature, it can be a bit overbearing at times. For instance, when I am trying to assign an alias to a table in my JOIN statements, it will frequently pull up keywords, function names, etc. and try to assign those as the alias name (whether or not I use the "AS" clause). For example, I started typing a command of "SELECT * FROM sometable AS a", and the editor automatically inserted "UNION ALL". This can be a real inconvenience as I now have to delete "UNION ALL" (or [CTRL]+[Z]), re-type my "a" for the alias I want to use, then make sure I don't accidentally hit [SPACE], [TAB] or a period, but instead hit the [ESC] key to prevent it from putting in something nonsensical (in the current context).
EDIT: I did find the option (File -> Settings -> Code Completion) to disable the automatic inserting of suggestions, so this issue is something of a moot point.
- It took me some searching to find the options to automatically enclose database object names in quotation marks. Many of the tables, views, functions, columns, etc. in my PostgreSQL database are defined using mixed-case object names, requiring them to be explicitly identified surrounded by quotation marks. While DataGrip will show names in mixed case, it will not, by default, automatically "quotify" the object names. This can be very problematic in my environment. As I said, I did find the option, but it was somewhat buried and not altogether intuitive.
Even so, this option could use a bit of refining. For instance, for the sake of argument (not getting into whether or not it's "good database practice"), if I try to create a new object using mixed-case like "MyTable", it does not appear that DataGrip automatically recognizes that it's mixed-case, so it doesn't put the quotation marks around the name. If I put the quotation marks around it myself, it tries to add extra quotation marks, so I have to delete some out in order to get it formatted correctly. It seems that it is able to pick up on other queues like spaces or special characters in the object name (like "My Table") to correctly quotify the name, but mixed-case does not trigger such a response from the UI.
- I've still not been able to find anything that explains some of the color-coding used in the UI. Specifically, when I update a function or view through the console, I sometimes see the text in the tab turn blue, and sometimes it turns red. I can't seem to figure out what causes this difference.
- The automatic save of console windows/files is a bit of a pain. I have a tendency to open up several of these at a time when I'm working on a project, then I have to go back and clean them all up from the "Scratches and Consoles" list. If there is an option to automatically delete them when the tab is closed, I haven't yet found it. Even if there is an option to prompt to save/delete, that would be better than just keeping them "hanging around" indefinitely.
- The "Synchronize" feature, while definitely necessary, can be a bit cumbersome. In my opinion, it would be much better if the user had the option to only "synchronize" (or "refresh") the current object (table, schema, etc.), or even just the current database rather than having it go through ALL of the connected databases on the server.
- Also with regards to the "Synchronize" feature, I've noted on more than one occasion that using this has caused DataGrip to completely "freeze up". To be fair, this usually happens when I've started a synchronization, then made some change to an object, then started another synchronization, all within less than a minute. I've seen some of the discussion posts that recommend turning off the "Auto Sync" flag for the DataSource, and this seems to have helped some, but I do still see this happening from time-to-time.
- Modifying a date field in my database by trying to just type in the date immediately pulls up the DatePicker box, preventing me from typing more than one character without closing out the DatePicker. While this is certainly useful in some situations, if I'm typing into a date field, I probably don't want the DatePicker to pop up.
I would rather have a button inside the date field that I can click to pop up the DatePicker if I choose, but otherwise, it just accepts my typing into the field without that box.
- When using a console, it seems that the console window will sometimes forget the database/schema to which I want to send the query/command, resulting in errors about cross-database queries. I was finally able to find the little option at the top of the console window that allows me to select a database/schema, but that option is somewhat hidden and not very well documented. I frequently have to switch between databases (and schemas), so being able to switch this on the fly is nice, but I've noted that it sometimes seems to "forget" which one I was using last.
- When setting up a new DataSource, there is a checkbox option for the user to save the password. Leaving this unchecked during the initial connection tests and such correctly prompts for the password, but there's apparently a second "Save Password" checkbox in that prompt dialog. It seems I missed that when I reconnected to the database and my password was saved by DataGrip because I'm no longer prompted.
In my opinion, it would be better if the prompting dialog would respect the option in the DataSource setup dialog. If the user THEN decides that they want their password saved, they can check that box and continue without interruption. Otherwise, the application will continue to prompt for subsequent connections.
- I believe I've seen an option for what text to display in the tabs when connected to multiple objects, but I can't remember where at this point. The issue, though, is that this text can get SO long that certain open objects are hidden and it can be difficult to find them. I realize there is a drop-down at the end of the line, but I think a left and right arrow indicator that scrolls through the open tabs (a la Notepad++) would be a much better design for this particular element.
- I have not found a way through the UI to easily create a Trigger. In PGAdmin III, this was available in the context menu:
However, I can find no such option in the DataGrip context menu:
I've also tried going through the main toolbar menus, but if this option is available through one of them, I still haven't found it yet.
- Regarding users (or "roles" in PostgreSQL), there does not appear to be any way through the DataGrip UI to list any groups to which the user belongs. This is similar to point #2 above in that it does not appear to show any of the ACL definitions for the user. For example, let's say I have a user to whom I've granted permission for the "Administrators" group. All I can currently see when I view the definition for this user, either through generating the DDL or the SQL Generator, is the most basic CREATE statement.
- Also on the topic of users, I have not yet found a way to create new users through the UI. Again, perhaps I've missed it, but this seems like it would be an important option to have in the context menu for the "roles" folder.
There have been a few other "quirks" that I've noticed, but these are the main ones that I've run across that have caused me the most issue with DataGrip so far. I'm not sure if these are actually limitations imposed by the data connector being used, or if they are things that simply did not make it into the design phase for this tool. While some of these things can be "worked around" (i.e., I can create a user through issuing the appropriate SQL command to the database, or I can get the current value of a sequence by using an appropriate SQL query), it feels to me like they should be readily available as an integrated part of the UI. As I said above, it certainly appears that DataGrip was created with the software developer/programmer in mind, rather than the database administrator.
Even so, I do actually think this will be a useful tool for me going forward, and I'm well aware that there will obviously be something of a "learning curve" involved with making the transition from PGAdmin III to DataGrip. This is just a list of those things which are making that transition the most difficult. Thank you for your time. Feel free to reach out to me with any questions about the information I've presented here.