{"id":668693,"date":"2025-12-16T19:26:08","date_gmt":"2025-12-16T18:26:08","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=datagrip&#038;p=668693"},"modified":"2026-01-26T18:58:51","modified_gmt":"2026-01-26T17:58:51","slug":"datagrip-turns-10-hidden-gems-of-datagrip","status":"publish","type":"datagrip","link":"https:\/\/blog.jetbrains.com\/en\/datagrip\/2025\/12\/16\/datagrip-turns-10-hidden-gems-of-datagrip","title":{"rendered":"DataGrip turns 10. Hidden gems of DataGrip."},"content":{"rendered":"\n<h2 class=\"wp-block-heading\"><strong>Looking back<\/strong><\/h2>\n\n\n\n<p><br>Hello, friends!<\/p>\n\n\n\n<p>10 years ago to this very day, DataGrip was born. That\u2019s right, on December 16, 2015, the first-ever version of DataGrip <a href=\"https:\/\/blog.jetbrains.com\/datagrip\/2015\/12\/16\/datagrip-1-0-formerly-0xdbe-a-new-ide-for-dbs-and-sql\/\">was released<\/a>!&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1280\" height=\"800\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/datagrip-DataGrip1_splash-2x.webp\" alt=\"\" class=\"wp-image-668837\"\/><\/figure>\n\n\n\n<p>But the origins of DataGrip go back even further. We had already been working to create a database IDE for quite some time by then, and its codename was 0xdbe. Some of you aficionados really liked it, and so did we! But business is business, so we decided to change the name to something more accessible.<\/p>\n\n\n\n<p>Here\u2019s how DataGrip 1.0 looked:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1280\" height=\"756\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/datagrip-refactorings.png\" alt=\"\" class=\"wp-image-668848\"\/><\/figure>\n\n\n\n<p>It\u2019s hard to imagine that this UI once felt slick and modern, but that\u2019s a good reminder that 10 years is a long time. We actually tried to recreate the same IDE state in late 2025. Here\u2019s the result:<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1792\" height=\"927\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/NewUI.png\" alt=\"\" class=\"wp-image-668859\"\/><\/figure>\n\n\n\n<p>We would like to thank you, our valued users, for being with us for so many years \u2013 for reporting issues in our tracker, for the heated discussions about flow-breaking features (one of which is even <a href=\"https:\/\/blog.jetbrains.com\/datagrip\/2025\/09\/16\/a-farewell-to-consoles\/\">happening right now<\/a>), and for recommending our tool to others. If anyone reading this post has been using DataGrip for 10 consecutive years, starting with version 1.0, please let us know in the comments section.<\/p>\n\n\n\n<p>Birthdays are a time to receive presents, but today we\u2019ve decided to give one instead. To celebrate the occasion, we\u2019ve put together a list of 10 hidden DataGrip gems for you!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><br><strong>The hidden gems<\/strong><\/h2>\n\n\n\n<p>These are ten features that even people on the DataGrip team have never heard about \ud83d\ude2c<br><\/p>\n\n\n\n<p><strong>1. Completion of words from open files: <em>Alt\/Opt+\/<\/em><br><\/strong><\/p>\n\n\n\n<p>Let\u2019s start with a text editor feature that has existed for decades in the IntelliJ Platform: cyclic word completion.<\/p>\n\n\n\n<p>This feature helps you complete <strong>any<\/strong> word from the currently open files.<\/p>\n\n\n\n<p>Press <em>Alt\/Opt+\/ <\/em>to search for matching words and repeat until you find the one you need. In SQL, this is especially useful for completing values inside INSERT statements: Just keep all the possible values in an open scratch file!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1318\" height=\"608\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/completion.gif\" alt=\"\" class=\"wp-image-669108\"\/><\/figure>\n\n\n\n<p><strong>2. Recent Locations<\/strong><\/p>\n\n\n\n<p>Some of you already know about the <em>Recent Files<\/em> (<em>Ctrl\/Cmd+E<\/em>) feature. It helps a lot when you need to reopen something you\u2019ve accidentally closed. But it has a sister feature: <em>Recent Locations.<\/em><\/p>\n\n\n\n<p>This pop-up allows you to search for a specific change, or a recently viewed or edited piece of text \u2013 most likely, your latest SQL query.<\/p>\n\n\n\n<p>Invoke it using <em>Ctrl\/Cmd+Shift+E<\/em>, and the list of recently viewed files will display not only the file name but also code snippets around the area you last viewed in the file. Invoke the same shortcut again, and only the changed files will remain visible.<\/p>\n\n\n\n<p>The best part? Speed search works here, meaning you can type code to filter the results even further.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/image-30.png\" alt=\"\" class=\"wp-image-668716\"\/><\/figure>\n\n\n\n<p><strong>3. Background image<\/strong><\/p>\n\n\n\n<p>This one is for those of you who love to customize everything under the sun. You can set any image as a custom background for the editor and all tool windows in DataGrip. To configure this, go to <em>Settings | Appearance &amp; Behavior | Appearance | UI Options | Background Image.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2048\" height=\"1299\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/image-32.png\" alt=\"\" class=\"wp-image-668767\"\/><\/figure>\n\n\n\n<p><strong><br>4. Generating schema dump with the SQL generator<\/strong><\/p>\n\n\n\n<p>The SQL generator is a powerful mechanism for generating a DDL statement for any kind of object or set of objects. You can invoke it either from the database tree or directly from the code editor. To do so, simply use the shortcut <em>Ctrl\/Cmd+Alt\/Opt+G<\/em>.<\/p>\n\n\n\n<p>What\u2019s less obvious is that you can dump the generated objects into files. This makes a lot of sense when working with an entire schema!<\/p>\n\n\n\n<p>All you have to do is invoke the SQL generator on the schema, switch to <em>File Output Options<\/em>, define the layout, and click <em>Dump<\/em>. Et voila! Your schema dump is ready.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2054\" height=\"1378\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/SQLGenerator.png\" alt=\"\" class=\"wp-image-668882\"\/><\/figure>\n\n\n\n<p><strong>5. Copy-pasting data sources<\/strong><\/p>\n\n\n\n<p>As easy as it sounds! <em>Ctrl\/Cmd+C<\/em> copies your data source, and <em>Ctrl\/Cmd+V<\/em> pastes it into any node of the database explorer. This is perfect for duplicating data sources or quickly creating similar ones.<\/p>\n\n\n\n<p>But the real gem is that your clipboard contains nothing more than an XML snippet describing your data source. This means it can be shared across different IDEs or machines! Send it to your colleague in Slack, and they\u2019ll be able to connect to this data source by pasting the XML into their database explorer. The only thing that isn\u2019t copied is the password; that needs to be re-entered.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1387\" height=\"856\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/CopyDS.png\" alt=\"\" class=\"wp-image-668893\"\/><\/figure>\n\n\n\n<p>More tips on how to share data sources are <a href=\"https:\/\/blog.jetbrains.com\/datagrip\/2018\/05\/21\/copy-and-share-data-sources-in-datagrip\/\" data-type=\"link\" data-id=\"https:\/\/blog.jetbrains.com\/datagrip\/2018\/05\/21\/copy-and-share-data-sources-in-datagrip\/\">here<\/a>.<\/p>\n\n\n\n<p><strong>6. Local history for folders in the <em>Files <\/em>tool window<br><\/strong><\/p>\n\n\n\n<p>Accidentally deleted a file or even an entire folder? Not only does the famous <em>Local History <\/em>feature let you go back in time within a text file, but it can also restore files and folders themselves!&nbsp;<\/p>\n\n\n\n<p>To do that, just right-click on a folder in the <em>Files<\/em> tool window and select <em>Show History | Local History.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/image-31.png\" alt=\"\" class=\"wp-image-668778\"\/><\/figure>\n\n\n\n<p><strong>7. Regions for SQL in the <em>File Structure<\/em> popup<br><\/strong><br>The custom region folding feature in DataGrip lets you define your own collapsible sections in SQL code using specially formatted comments. This helps you hide or show these blocks by <em>Ctrl\/Cmd+Minus <\/em>and <em>Ctrl\/Cmd+Plus<\/em>.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1574\" height=\"920\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/regions_01.gif\" alt=\"\" class=\"wp-image-669119\"\/><\/figure>\n\n\n\n<p>Even more importantly, however, you can see the labels in the <em>File Structure<\/em> pop-up. Press <em>Ctrl\/Cmd+F12 <\/em>to see the list of your queries \u2013 or regions of queries!<\/p>\n\n\n\n<p>What\u2019s especially cool is that you can run your SQL code with <em>Ctrl\/Cmd+Enter <\/em>right from there!<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1742\" height=\"1162\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/regions_02.gif\" alt=\"\" class=\"wp-image-669130\"\/><\/figure>\n\n\n\n<p><strong>8. Node as a table in the database explorer<\/strong><\/p>\n\n\n\n<p>In the database explorer, each node can be presented as a table. For example, you can get a list of all tables in a schema with their properties. Just press <em>F4<\/em> on the <em>tables <\/em>node.<\/p>\n\n\n\n<p>All the data editor features are available to you: search, filtering, exporting, and more.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2252\" height=\"1158\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/ListTables.png\" alt=\"\" class=\"wp-image-668926\"\/><\/figure>\n\n\n\n<p>What if you want to see the list of all PostgreSQL functions with unsafe concurrency kind? Sure, you could write a query, but it\u2019s much easier in DataGrip: just open the node as a table and use a local filter!<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1646\" height=\"848\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/ListFunctions.png\" alt=\"\" class=\"wp-image-668937\"\/><\/figure>\n\n\n\n<p><strong>9. Calculator<\/strong><\/p>\n\n\n\n<p>This may not be the most useful feature, but we bet it\u2019s the most hidden one. The <em>All<\/em> tab in <em>Search Everywhere<\/em> has a calculator! Simply paste the expression you need into the search field to retrieve the result.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1164\" height=\"580\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/Calc.png\" alt=\"\" class=\"wp-image-668948\"\/><\/figure>\n\n\n\n<p><strong>10. Ability to attach a database object in the AI chat<\/strong><\/p>\n\n\n\n<p>Writing any feature digest post in 2025 is impossible without mentioning AI. Today&#8217;s hidden gem in that category is the ability to attach database objects to the chat.<br><br>The database context you provide can be even more specific than the schema. You can attach the database object you need to work with \u2013 for example, a table or a view. This can be particularly useful when you\u2019re working with larger schemas.<\/p>\n\n\n\n<p>To attach a database object, type <em>@<\/em> or<em> #<\/em> in the input field, select or type <em>dbObject<\/em>:, and then select the object you want to attach from the list.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"1200\" height=\"716\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2025\/12\/AI.png\" alt=\"\" class=\"wp-image-668959\"\/><\/figure>\n\n\n\n<p>That\u2019s it for today! Let us know in the comments section how many of these features you were already aware of.<\/p>\n\n\n\n<p>Develop with pleasure! \ud83d\ude09<\/p>\n\n\n\n<p>The DataGrip team<\/p>\n","protected":false},"author":395,"featured_media":668999,"comment_status":"closed","ping_status":"closed","template":"","categories":[],"tags":[],"cross-post-tag":[8851],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/datagrip\/668693"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/datagrip"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/types\/datagrip"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/users\/395"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/comments?post=668693"}],"version-history":[{"count":9,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/datagrip\/668693\/revisions"}],"predecessor-version":[{"id":677065,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/datagrip\/668693\/revisions\/677065"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media\/668999"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/media?parent=668693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/categories?post=668693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/tags?post=668693"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/en\/wp-json\/wp\/v2\/cross-post-tag?post=668693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}