<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Forest Admin</title>
    <description>The latest articles on DEV Community by Forest Admin (@forestadmin).</description>
    <link>https://dev.to/forestadmin</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F2963%2Ff823c02e-02d7-4b4f-832e-54eb2449d4c2.png</url>
      <title>DEV Community: Forest Admin</title>
      <link>https://dev.to/forestadmin</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/forestadmin"/>
    <language>en</language>
    <item>
      <title>An admin panel with thousands of n8n automations under the hood</title>
      <dc:creator>Monika Ambrozowicz</dc:creator>
      <pubDate>Tue, 20 Jun 2023 16:00:10 +0000</pubDate>
      <link>https://dev.to/forestadmin/an-admin-panel-with-thousands-of-n8n-automations-under-the-hood-27jp</link>
      <guid>https://dev.to/forestadmin/an-admin-panel-with-thousands-of-n8n-automations-under-the-hood-27jp</guid>
      <description>&lt;p&gt;We're thrilled to announce an integration of &lt;a href="https://www.forestadmin.com/"&gt;Forest Admin&lt;/a&gt; and &lt;a href="https://n8n.io/"&gt;n8n&lt;/a&gt;. This integration allows Forest Admin to take the first steps towards workflow automation, bringing even more power than a person could build.&lt;/p&gt;

&lt;p&gt;n8n is an open-source workflow automation tool that allows users to quickly and easily create powerful workflows, automating tasks and processes across different applications and services. It supports thousands of services out of the box, including Slack, Google Sheet, Hubspot, Customer.io, custom HTTP endpoint, and much more.&lt;/p&gt;

&lt;p&gt;For the past few years, n8n has become really popular as an open-source workflow automation tool. Here at Forest Admin, we are huge fans of it. We use n8n regularly, and it's become one of the most important resources in our company. We highly respect the company and almost cannot stop talking about it and expressing our admiration every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  An admin panel with thousands of automations under the hood
&lt;/h2&gt;

&lt;p&gt;When we created Forest Admin, our mission was to help companies focus their development effort on customer-facing apps, thereby reducing the time and resources they spend on internal tools like the admin panel.&lt;/p&gt;

&lt;p&gt;The admin panel is initially seen as a simple CRUD interface. As time goes on, it becomes increasingly necessary to have custom actions, permission control, and an optimized user interface in order to effectively oversee the company's entire business operations.&lt;/p&gt;

&lt;p&gt;With the n8n integration, we are taking a big leap forward in workflow automation with Forest Admin, providing an admin panel that offers a wealth of features that would be out of reach for most development teams.&lt;/p&gt;

&lt;p&gt;Forest Admin starts off from the foundation of the CRUD admin panel to end with the go-to-tool for all of a company’s operations.&lt;/p&gt;

&lt;p&gt;The integration of Forest Admin and n8n opens thousands of possible actions and automations launched from an admin panel. Here are just a few of them identified by the first users of this integration:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enrich user information with CRM data for better lead scoring.&lt;/li&gt;
&lt;li&gt;Anonymize user data with one click on the button.
Send a SMS reminder for nearing subscription renewals.&lt;/li&gt;
&lt;li&gt;Export customer orders and generate automated invoices.&lt;/li&gt;
&lt;li&gt;Change a user's subscription and send a Slack notification to the team.&lt;/li&gt;
&lt;li&gt;Export a list of transactions, and send an automated email with a csv file to the accounting.&lt;/li&gt;
&lt;li&gt;Generate a push notification when a payment is received.&lt;/li&gt;
&lt;li&gt;…
And much more. The possibilities and third-party integrations available are endless!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How does it work?
&lt;/h2&gt;

&lt;p&gt;Getting started with automations on Forest Admin is super easy, and it doesn’t require coding unless you want to add additional customization and functionalities.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create your n8n workflow&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Go to n8n and create a new workflow with a &lt;a href="https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.webhook/"&gt;webhook&lt;/a&gt; trigger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0SKncb2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs4i4km01689jib881wk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0SKncb2M--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xs4i4km01689jib881wk.png" alt="Image description" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then select POST as the HTTP method and copy the Webhook URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2jJlXLYz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ij0vniyx78cf58n7621.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2jJlXLYz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5ij0vniyx78cf58n7621.png" alt="Image description" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create the Forest Admin action&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the settings panel of the collection that the action is associated with, create a new action and select n8n. Simply paste the Webhook URL and you're all set!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9jcGgI4q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5rkb1qaat9dep3nspuy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9jcGgI4q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a5rkb1qaat9dep3nspuy.png" alt="Image description" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Real-life end-to-end example
&lt;/h2&gt;

&lt;p&gt;In the following example, let's say I am part of the Customer Care team of a fintech company and one of my responsibilities is to onboard new companies that have just signed up. To do my job efficiently, I go to my Forest Admin "Onboarding" Workspace every day and make a decision as to whether or not to validate the new account.&lt;/p&gt;

&lt;p&gt;In order to have a maximum amount of information on the company that I must validate, I have created an "Enrich Data" action button which gives me a whole series of information that will help me make the decision such as the number of employees of the company, its estimated annual income, the total amount of its funding raises, its creation date, etc.&lt;/p&gt;

&lt;p&gt;In the following example, I use the company "Avvo". Based on the enrichment data, I can confidently validate the account by clicking on the "Mark as live" button. All of this is done through one single interface, optimizing the number of clicks to access the information and trigger the necessary actions depending on the situation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PJghYpud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yx2lk1ho08l6ct1tb6po.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PJghYpud--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yx2lk1ho08l6ct1tb6po.png" alt="Image description" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The implementation of the n8n workflow is simple. First, I retrieve the details of the selected company through a SQL query on my database. I then ask Clearbit for the company domain name and ask it to enrich this company. Then, I do a second enrichment phase with another tool, Apollo. Finally, I update the record of my database with the new data retrieved from this enrichment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WLGIcG_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pb32z3px4c5faqyn93zk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WLGIcG_J--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pb32z3px4c5faqyn93zk.png" alt="Image description" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=n8n-launch"&gt;Try it by yourself for free&lt;/a&gt;
&lt;/h2&gt;

</description>
      <category>webdev</category>
      <category>n8n</category>
      <category>cloud</category>
      <category>adminpanel</category>
    </item>
    <item>
      <title>Postgres Enums dissected</title>
      <dc:creator>Gabriel</dc:creator>
      <pubDate>Fri, 26 May 2023 11:00:59 +0000</pubDate>
      <link>https://dev.to/forestadmin/postgres-enums-dissected-5295</link>
      <guid>https://dev.to/forestadmin/postgres-enums-dissected-5295</guid>
      <description>&lt;p&gt;PostgreSQL is a popular open-source object-relational database management system known for its stability, performance and feature-rich SQL implementation.&lt;/p&gt;

&lt;p&gt;Postgres enums (short for "enumerated types") represent one special data type in PostgreSQL that allows you to define a list of possible values for a column. They can be used to enforce data integrity and make it easier to query and sort data.&lt;/p&gt;

&lt;p&gt;Let's sky dive through them to see what they have to offer and how to best use them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Postgres enums for?
&lt;/h2&gt;

&lt;p&gt;In PostgreSQL, an enum is a data type that consists of a set of symbolic names (enumerators) and their values. &lt;/p&gt;

&lt;p&gt;Enums are created using the &lt;strong&gt;CREATE TYPE&lt;/strong&gt; command and can be used in a table column just like any other data type (e.g. integer, varchar).&lt;/p&gt;

&lt;p&gt;Enums have some important differences from other data types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enum values are stored as integers, with the enumerator names serving as aliases for the integer values.&lt;/li&gt;
&lt;li&gt;Enums have a fixed internal storage size, which is the size needed to store the largest enumerator. This means that enums may take up more space than other data types (e.g. varchar) in some cases.&lt;/li&gt;
&lt;li&gt;Although Enums were originally fixed – meaning you could not add or remove values once you defined the set of enumerators – Postgres 9.1 released in 2011 enabled the ALTER function, as shown here:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--b8AorUhl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/om9odhaoft3j0vvhvzz0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--b8AorUhl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/om9odhaoft3j0vvhvzz0.png" alt="Image description" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keep in mind however that when you alter an enum type, all columns that use this specific enum type will also be affected. It is therefore important to update all relevant code and scripts as to avoid any potential backfiring.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to create and use Postgres enums?
&lt;/h2&gt;

&lt;p&gt;To create an enum type in PostgreSQL, you can use the following syntax:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KnuxLld5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fd9bujis7irao7kws72b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KnuxLld5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fd9bujis7irao7kws72b.png" alt="Image description" width="800" height="212"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is an example of creating an enum type called "status" with the possible values "active", "inactive", and "deleted":&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JoxE50Me--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/owrv0f0xohrxxzdg8weq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JoxE50Me--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/owrv0f0xohrxxzdg8weq.png" alt="Image description" width="800" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To use an enum type in a table, you can specify it as the data type for a column:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--E0-gG6S7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5e4fyfui1ac3bs4urnfi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--E0-gG6S7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5e4fyfui1ac3bs4urnfi.png" alt="Image description" width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enums also have a number of specific functions and operators that you can use when querying data. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;enum_range()&lt;/strong&gt; returns an array of all enumerators for an enum type, in the order they were defined.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;enum_first()&lt;/strong&gt; returns the first enumerator for an enum type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;enum_last()&lt;/strong&gt; returns the last enumerator for an enum type.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Postgres enums cons
&lt;/h2&gt;

&lt;p&gt;As mentioned earlier, enums are fixed and cannot be altered once created. In other words, they are not flexible. &lt;/p&gt;

&lt;p&gt;This can be a disadvantage if you need to add or remove values from an enum type.&lt;/p&gt;

&lt;p&gt;Furthermore, if you need to change the values of an enum type (e.g. renaming an enumerator), you will need to create a new enum type, migrate the data to the new type, and then update any references to the old enum type. This can be a time-consuming process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best practices for using Postgres enums
&lt;/h2&gt;

&lt;p&gt;It is important to keep your enums organized and maintain them properly to avoid issues down the road. Here are some tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose meaningful names for your enumerators&lt;/li&gt;
&lt;li&gt;Avoid using abbreviations or acronyms that may not be immediately clear&lt;/li&gt;
&lt;li&gt;Use enum ranges to define groups of related enumerators (e.g. "pending", "approved", "rejected" for a "status" enum)&lt;/li&gt;
&lt;li&gt;Consider using a tool or script to automate the process of creating and updating enums&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Considerations for using Postgres enums in relation to other data types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enums may be more suitable for small lists of fixed values (e.g. "male" or "female" for a "gender" column)&lt;/li&gt;
&lt;li&gt;For more extensive lists or sets of values that may need to be updated or changed more frequently, other data types (e.g. varchar, integer) may be more appropriate.&lt;/li&gt;
&lt;li&gt;Be aware of the potential for increased storage size when using enums, especially if you have many enumerators with long names.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In summary, enums are a useful data type in PostgreSQL that can help improve data integrity, facilitate querying and sorting, and potentially improve performance.&lt;/p&gt;

&lt;p&gt;However, it is important to consider the limitations and potential challenges of using Postgres enums, and to choose the data type that is relevant to your needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who are we?
&lt;/h2&gt;

&lt;p&gt;Forest Admin is an admin panel solution that saves your back-end engineers time and gives your operational teams more autonomy. Our highly customizable admin panel connects to your databases and APIs to ease your operations so that you can focus more on your business and less on backend operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  If you have any doubts, here's a quick view of the features Forest Admin brings to the table
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Data&lt;/strong&gt;: Forest Admin's standout feature is its ability to scan your data structure and automatically generate an operational admin panel.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DpBmziVl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6gqe8qy7r0mn3zrsov5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DpBmziVl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6gqe8qy7r0mn3zrsov5.png" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Customization&lt;/strong&gt;: Once the initial admin panel has been auto-generated, Forest Admin enables you to tailor its functionality to match your precise needs, making the tool adaptable for a wide array of business applications.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Md6hZz-8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/84k1jw3o101omfwcehiv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Md6hZz-8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/84k1jw3o101omfwcehiv.png" alt="Image description" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workspace&lt;/strong&gt;: The dream tool to manage your daily operations. This drag and drop feature enables you to create workflows at will in order to ease your workload. The rule is simple: one workflow, one workspace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--D-bGhjFB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp59p26hgso2t03lfvdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--D-bGhjFB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cp59p26hgso2t03lfvdf.png" alt="Image description" width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dashboard&lt;/strong&gt;: Customize your own dashboard to take a quick look at key metrics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MYVWr4DQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l4191iw3tfjkhxjvzq7e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MYVWr4DQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/l4191iw3tfjkhxjvzq7e.png" alt="Image description" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integration Capabilities&lt;/strong&gt;: Forest Admin can be installed in two ways: connecting it to an existing application built on frameworks like Node.js, Django, Laravel, Ruby on Rails, or linking it directly to one or multiple databases – check all of our integrations on our integration page.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2D6CYbVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yq86602j2e4qgagw0vgq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2D6CYbVE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yq86602j2e4qgagw0vgq.png" alt="Image description" width="800" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ready to streamline your operations? &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign="&gt;Sign up&lt;/a&gt; for Forest Admin today.&lt;/p&gt;

&lt;p&gt;If you want to know more about various Databases, here are a few articles we’ve written on the subject:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dev.to/forestadmin/postgresql-data-types-and-more-1kb4"&gt;PostgreSQL data types&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/mongodb-vs-mysql/"&gt;MongoDB vs MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/best-postgres-gui/"&gt;Most popular PostgreSQL GUIs of 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/top-5-mariadb-gui-tools-in-2021/"&gt;Most popular MariaDB GUIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/mongodb-cheat-sheet/"&gt;MongoDB cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>PostgreSQL data types and more</title>
      <dc:creator>Gabriel</dc:creator>
      <pubDate>Thu, 11 May 2023 13:25:10 +0000</pubDate>
      <link>https://dev.to/forestadmin/postgresql-data-types-and-more-1kb4</link>
      <guid>https://dev.to/forestadmin/postgresql-data-types-and-more-1kb4</guid>
      <description>&lt;p&gt;In object-oriented programming [OOP], what a programmer does ultimately can be summarized by the manipulation of objects. These objects are various data types that interact with each other while respecting a specific set of rules – themselves depending on the programming language or framework in use.&lt;/p&gt;

&lt;p&gt;When writing a program that manipulates these objects, the programmer must create a database to save all the work performed on the aforementioned objects by the program– these objects are also referred to as data types.&lt;/p&gt;

&lt;p&gt;Although there are many different databases, we will focus on one only here : PostgreSQL – and more specifically on the types of data it can store.&lt;/p&gt;

&lt;p&gt;Let's start by addressing the elephant – pun intended – in the room: what exactly is Structured Query Language [SQL]?&lt;/p&gt;

&lt;h2&gt;
  
  
  What is SQL?
&lt;/h2&gt;

&lt;p&gt;SQL is a programming language used to interact with and manipulate databases. It enables to create, modify and query databases, as well as to control access to them.&lt;br&gt;
It has become the standard language in the development world. &lt;br&gt;
Anything that has to do with databases, such as web applications, data warehouses and business intelligence systems is often handled in SQL.&lt;/p&gt;

&lt;p&gt;SQL is a powerful and flexible language that allows users to perform a wide range of tasks, including creating and altering database structures, inserting and updating data, and querying data for specific information.&lt;/p&gt;

&lt;p&gt;There are many SQL databases tools to be used, but some rise in popularity faster than others. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Postgres so popular?
&lt;/h2&gt;

&lt;p&gt;Postgres has undeniably become one of – if not the one – most popular relational database management system [RDBMS].&lt;/p&gt;

&lt;p&gt;The reasons why are many but, if we’re to name a few, one could argue that it is largely due to the facts that it is secure, scalable, protects data integrity and because it complies with ACID principles [Atomicity, Consistency, Isolation, Durability] to ensure safe transactions.&lt;/p&gt;

&lt;p&gt;Alternatives to Postgres include but are not limited to MySQL, MariaDB, Microsoft SQL Server or MongoDb – all of which Forest Admin integrates at ease. &lt;/p&gt;

&lt;p&gt;There are several factors that can influence the choice of a database for a particular project. The Data model, performance, cost and the possibility to integrate the database with other systems if needed.&lt;/p&gt;

&lt;p&gt;Getting into the meat of it now, what data types can be stored in PostgreSQL?&lt;/p&gt;

&lt;h2&gt;
  
  
  Data types
&lt;/h2&gt;

&lt;p&gt;In PostgreSQL, a data type is a specific kind of object that can hold a particular type of data. &lt;/p&gt;

&lt;p&gt;There are data types families and then the actual data itself.&lt;br&gt;
When it comes to families, here they are, from the most basic to the most special:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Boolean&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Character Types&lt;/strong&gt; [char, varchar, and text]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numeric Types&lt;/strong&gt; [integer and floating-point number]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal Types&lt;/strong&gt; [date, time, timestamp, and interval]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UUID&lt;/strong&gt; [Universally Unique Identifiers]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Array&lt;/strong&gt; [ array strings, numbers, etc.]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;JSON&lt;/strong&gt; [JSON data]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;hstore&lt;/strong&gt; [key-value pair]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Special Types&lt;/strong&gt; [network address and geometric data]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is a list of some common data types in PostgreSQL with a detail of what it is, and an example – again, each of them belonging to a family mentioned above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;integer&lt;/strong&gt;: stores a 32-bit signed integer – 42&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bigint&lt;/strong&gt;: stores a 64-bit signed integer – 8092233477720368557&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;smallint&lt;/strong&gt;: stores a 16-bit signed integer – 26727&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;decimal&lt;/strong&gt;: stores a fixed-point decimal number – 56.11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;numeric&lt;/strong&gt;: stores a variable-precision decimal number – 12345.678&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;real&lt;/strong&gt;: stores a single-precision floating-point number – 3.14&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;double precision&lt;/strong&gt;: stores a double-precision floating-point number – 7.14159232384665358979&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;boolean&lt;/strong&gt;: stores a true or false value – true&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;char&lt;/strong&gt;: stores a single character – ’J’&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;varchar&lt;/strong&gt;: stores a variable-length character string – ’We are Forest Admin’&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;text&lt;/strong&gt;: stores a variable-length character string – ’ We are a back office solution that helps businesses manipulate and better understand their data.’&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;date&lt;/strong&gt;: stores a date (year, month, day) – '2022-12-16'&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;time&lt;/strong&gt;: stores a time (hour, minute, second) – '18:45:22'&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;timestamp&lt;/strong&gt;: stores a date and time (year, month, day, hour, minute, second) – '2022-12-16 18:45:22'&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;interval&lt;/strong&gt;: stores a duration of time (e.g. 2 days, 3 hours) – ’5 days 7 hours’&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;array&lt;/strong&gt;: a collection of items that are stored in a contiguous block of memory – [‘Hello’, 4, ‘World’, 89]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that these are just examples and may not necessarily represent the exact syntax for using these data types in a PostgreSQL database. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Char&lt;/strong&gt; may require a length specifier and &lt;strong&gt;timestamp&lt;/strong&gt; most often than not has additional formatting options.&lt;/p&gt;

&lt;p&gt;Each data type has its own set of properties and limitations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Alternatives to SQL
&lt;/h2&gt;

&lt;p&gt;Although we covered PostgreSQL, there are various alternatives to SQL that you may want to consider depending on your use case and, let’s face it, your inclinations. &lt;/p&gt;

&lt;p&gt;Alternatives such as NoSQL [MongoDB, Cassandra], NewSQL [Google Cloud Spanner], Graph [Neo4j, Apache TinkerPop], Key-value [DynamoDB], Column-oriented [Apache HBase] or Object-oriented [GemStone].&lt;/p&gt;

&lt;p&gt;If you feel like chatting with us because you're curious about what we do and how we can help you, please reach out to us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who are we?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.forestadmin.com/"&gt;&lt;strong&gt;Forest Admin&lt;/strong&gt;&lt;/a&gt; is an admin panel solution that saves your back-end engineers time and gives your operational teams more autonomy. Our highly customizable admin panel connects to your databases and APIs to ease your operations so that you can focus more on your business and less on backend operations. &lt;/p&gt;

&lt;p&gt;Ready to streamline your operations? &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign="&gt;&lt;strong&gt;Sign up&lt;/strong&gt;&lt;/a&gt; for Forest Admin today.&lt;/p&gt;

&lt;p&gt;If you want to know more about various Databases, here are a few articles we’ve written on the subject:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/mongodb-vs-mysql/"&gt;MongoDB vs MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/best-postgres-gui/"&gt;Most popular PostgreSQL GUIs of 2022&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/top-5-mariadb-gui-tools-in-2021/"&gt;Most popular MariaDB GUIs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.forestadmin.com/mongodb-cheat-sheet/"&gt;MongoDB cheat sheet&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>postgres</category>
      <category>database</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Laravel vs Symfony</title>
      <dc:creator>Gabriel</dc:creator>
      <pubDate>Mon, 19 Dec 2022 17:48:08 +0000</pubDate>
      <link>https://dev.to/forestadmin/laravel-vs-symfony-4d71</link>
      <guid>https://dev.to/forestadmin/laravel-vs-symfony-4d71</guid>
      <description>&lt;p&gt;If you’re thinking of what web application framework to choose for your PHP project, you’ve come to the right place.&lt;/p&gt;

&lt;p&gt;Picking the good framework is paramount to increase efficiency and ensure delivery, depending on what you do. The two most popular PHP frameworks to date remain Symfony and Laravel.&lt;/p&gt;

&lt;p&gt;While both frameworks have similar capabilities and share many common features, there are some key differences between the two that we list here to help you make up your mind.&lt;/p&gt;

&lt;p&gt;Let’s start with a bit of history.&lt;/p&gt;

&lt;h2&gt;
  
  
  Genesis
&lt;/h2&gt;

&lt;p&gt;PHP – standing for Personal Home Page – is a programming language that was originally created by a Danish-Canadian programmer named Rasmus Lerdor, in 1993, to handle his own website.&lt;/p&gt;

&lt;p&gt;It was designed to make it easier to create dynamic web pages, and it quickly became a popular choice for web developers because of its simplicity.&lt;/p&gt;

&lt;p&gt;Laravel and Symfony are both open-source PHP web frameworks used for web application development. Laravel was created by Taylor Otwell in 2011, while Symfony was created by Fabien Potencier in 2005.&lt;/p&gt;

&lt;p&gt;Laravel is known for its elegant syntax and ability to handle complex web applications easily, making it a popular choice among developers. Symfony, on the other hand, is known for its stability, flexibility, and the large number of features it offers.&lt;/p&gt;

&lt;p&gt;Many popular websites and web applications, such as Drupal and Magento – acquired by Adobe Inc in May 2018 for $1.68 billion – are built using one of these frameworks.&lt;/p&gt;

&lt;p&gt;Both Laravel and Symfony have been widely adopted by the web development community, and have a strong presence in the PHP ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Splitting the bill
&lt;/h2&gt;

&lt;p&gt;Although you can build any app from scratch with both frameworks, their technical differences sets them apart.&lt;/p&gt;

&lt;p&gt;Symfony is a full-stack framework that provides a wide range of tools and components that can be used to build a wide variety of web apps. That being said, it is often used by larger companies tackling bigger and more complex issues – often involving substantial features.&lt;/p&gt;

&lt;p&gt;It allows for a high degree of flexibility and customization, which logically makes the learning curve steeper for new users.&lt;/p&gt;

&lt;p&gt;Laravel’s smooth code and various magic methods have helped, among other things, to make it one of the most popular PHP frameworks. It is however more opinionated a framework in the sense that it has a specific set of conventions and assumptions on the way web apps should be built. In other words, flexibility is not its forte. It has a structure and wants you to respect it.&lt;/p&gt;

&lt;p&gt;It is often used by smaller teams and individual developers who wish to turn-on the auto-pilot – so to speak. Providing such a strict structure and guidelines helps with its simplicity and ease of use.&lt;/p&gt;

&lt;p&gt;Moreover, Laravel is built on top of a monolithic architecture – meaning your entire application runs as one single program – which provides a more integrated and cohesive framework for building web applications. This can make it easier to learn and use, but may also limit the flexibility and customization of the framework.&lt;/p&gt;

&lt;p&gt;Overall, Symfony and Laravel are both popular PHP web application frameworks, but they have some key differences in terms of their focus, target audience, architecture, and design. Which framework is better will depend on the project you’re working on.&lt;/p&gt;

&lt;h2&gt;
  
  
  No need to choose with Forest Admin
&lt;/h2&gt;

&lt;p&gt;Regardless of which framework you chose to build your application – we’ve got you covered on both.&lt;/p&gt;

&lt;p&gt;Forest Admin provides a highly flexible and secure internal tool solution to make sure you have the admin panel you need to understand your business and grow.&lt;/p&gt;

&lt;p&gt;Find all you need to know about our integration for Symfony &lt;a href="https://www.forestadmin.com/integrations/symfony" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and Laravel &lt;a href="https://www.forestadmin.com/integrations/laravel" rel="noopener noreferrer"&gt;there&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you feel chatting with us because you're curious about what we do and how we can help you, please &lt;a href="//mailto:hello@forestadmin.com"&gt;reach out&lt;/a&gt; to us, or &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-laravel-vs-symfony&amp;amp;utm_content=blog-laravel-vs-symfony" rel="noopener noreferrer"&gt;sign up&lt;/a&gt; directly.&lt;/p&gt;

&lt;p&gt;We will be happy to discuss with you and book a demo to show you what Forest Admin can do.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bullet point recap
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Laravel pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Easy to code and maintain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in features that help developers build sophisticated web applications quickly and easily.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy unit testing, which can help ensure that your application is reliable and bug-free.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Scalable for small to medium size web applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secure with its built-in access control system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Active community of developers who contribute to the framework. This means that you can easily find help and support when you need it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy Data migration&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Laravel Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Can be difficult to learn to those new to web development.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lighter framework, which means more limited in scale.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Slower when application is getting too big for the framework.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Opinionated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Frequent updates.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Symfony pros&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Great code quality.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Easy integration with other popular frameworks and libraries. This allows developers to easily use the best tools for each task, rather than being limited to a single framework's capabilities.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Large and active community. Symfony has the largest community in the market.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Built-in testing support.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Highly flexible and customizable, which allows developers to tailor the framework to their specific needs and preferences.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Good documentation. Symfony has extensive documentation that is regularly updated.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Symfony cons&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Steep learning curve due to its wide range of possibilities. It just takes time to wrap one’s head fully around it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Performance issues because of its complex framework and because it also relies on other technologies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Longer tests because of the need to prebuilt code for multiple uses.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lack of support. Although Symfony has a large and active community, it is not as well-supported as some other PHP frameworks.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>Forest Admin, the pioneer of low code internal tools, is now free with unlimited users</title>
      <dc:creator>Monika Ambrozowicz</dc:creator>
      <pubDate>Wed, 02 Nov 2022 10:55:53 +0000</pubDate>
      <link>https://dev.to/forestadmin/forest-admin-the-pioneer-of-low-code-internal-tools-is-now-free-with-unlimited-users-1jbd</link>
      <guid>https://dev.to/forestadmin/forest-admin-the-pioneer-of-low-code-internal-tools-is-now-free-with-unlimited-users-1jbd</guid>
      <description>&lt;p&gt;In the last couple of weeks, the tech industry has witnessed several announcements about increasing prices of popular tools. Heroku has canceled its free plan after offering it for over a decade. Slack has increased its price and limited its free plan to only 3 months. Figma lovers are worried if Adobe – the new owner of their essential design tool – is going to limit its free plan as well, even if there are no such talks at the moment.&lt;/p&gt;

&lt;p&gt;Forest Admin, the pioneer of low code internal tools, has made the decision to go against the trend and offer a fully-functional and customisable admin panel solution for free for unlimited users. It means that regardless of how many people use Forest Admin in a given company, it will be free of charge. This update reflects the long-term mission of Forest Admin to make developers’ lives easier and, even more importantly, they feel that it better fits its users’ different stages of growth.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We want as many people as possible to be able to use Forest Admin and reap the benefits of having a powerful, easy-to-use admin panel from day one.”&lt;br&gt;
Sandro Munda, Forest Admin’s CEO&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, developers can sign up for a free account (no credit card required), set up a fully-functional internal tool in the blink of an eye, and invite an unlimited number of users. All of it for free – no catch.&lt;/p&gt;

&lt;p&gt;Forest Admin also has a paid offer for businesses that need more than what the free plan offers. The paid version enables setting up roles and permissions to determine who can do what on the admin panel and quickly adjust it when needed. For example, a C-level executive will not see or use an admin panel in the same way as a developer who needs more technical data. Likewise, an operational person will need to see the data in a specific way to do their work efficiently. This feature is a part of a Team plan that costs $12 per user.&lt;/p&gt;

&lt;p&gt;On top of that, there are advanced functionalities for established businesses that need advanced security features like SSO or IP Whitelisting, approval workflows, collaborations features, and more. These can be found in a new Plus plan that costs $48 per user. All details can be found on the &lt;a href="https://www.forestadmin.com/pricing?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=new-pricing&amp;amp;utm_term=new-pricing-2022"&gt;pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  About Forest Admin
&lt;/h2&gt;

&lt;p&gt;Founded in 2017, &lt;a href="https://www.forestadmin.com/?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=new-pricing&amp;amp;utm_term=new-pricing-2022"&gt;Forest Admin&lt;/a&gt; is a low-code internal tool solution that helps developers save time and provide their business’ teams with internal tools such as fully-featured admin panels, dashboards and database manipulation tools that are tailored to their operations and ready to scale. Thanks to its unique hybrid architecture, Forest Admin offers a business-grade level of security as user data never reaches Forest Admin servers.&lt;/p&gt;

</description>
      <category>news</category>
      <category>webdev</category>
      <category>node</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Top 5 MariaDB GUI tools in 2022</title>
      <dc:creator>Monika Ambrozowicz</dc:creator>
      <pubDate>Mon, 01 Aug 2022 12:48:57 +0000</pubDate>
      <link>https://dev.to/forestadmin/top-5-mariadb-gui-tools-in-2022-4k5a</link>
      <guid>https://dev.to/forestadmin/top-5-mariadb-gui-tools-in-2022-4k5a</guid>
      <description>&lt;p&gt;According to the &lt;a href="https://db-engines.com/en/ranking" rel="noopener noreferrer"&gt;DB-Engines Ranking&lt;/a&gt;, MariaDB ranks 12th overall, and 8th among the relational databases, ahead of Microsoft Azure, Amazon DynamoDB, Snowflake, Redshift, and hundreds of others. What is more interesting though, is that MariaDB was ranked 20th just five years ago, and its popularity only seems to grow.&lt;/p&gt;

&lt;p&gt;MariaDB is an open-source fork of MySQL, compared to which it has faster performance, and is more suitable for large-sized data. Both databases are highly compatible with each other, which allows a lot of tools to work equally well with MariaDB and MySQL. It is also true for Forest Admin as the onboarding is exactly the same whether you choose one of them or another. The same can be said for other popular MariaDB GUI tools, like DBeaver, dbForge Studio, HeidiSQL, but some tools are either dedicated to one database or they perform slightly better depending on the database.&lt;/p&gt;

&lt;p&gt;Now let’s have a look at the most widely-used database GUI tools that are proven to work well with MariaDB. We have chosen them based on the official MariaDB Knowledge Base, their popularity on the r/MariaDB community on Reddit, and reviews left on TrustPilot.&lt;/p&gt;

&lt;h2&gt;
  
  
  DBeaver
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dbeaver.io/" rel="noopener noreferrer"&gt;DBeaver&lt;/a&gt; is a free and open source multiplatform tool for all people who work with databases. Apart from MariaDB, it supports MySQL, PostgreSQL, Oracle, MS Access, MongoDB, Redis, and many more databases. It is actively maintained, and users are invited to report bugs and suggest features on the &lt;a href="https://github.com/dbeaver/dbeaver" rel="noopener noreferrer"&gt;DBeaver GitHub page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnordga3yo8p6qc2slszy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnordga3yo8p6qc2slszy.png" alt="DBeaver for MariaDB's interface"&gt;&lt;/a&gt;&lt;br&gt;
DBeaver for MariaDB. Source: &lt;a href="https://dbeaver.io/" rel="noopener noreferrer"&gt;https://dbeaver.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data viewer and editor: sorting, filtering, export, etc.,&lt;/li&gt;
&lt;li&gt;Data and metadata search,&lt;/li&gt;
&lt;li&gt;Metadata browser: viewing and editing tables, views, columns, users, roles, procedures, etc.&lt;/li&gt;
&lt;li&gt;File export and import, from a variety of formats such as CSV, HTML, XML, JSON, XLS, and XLSX.&lt;/li&gt;
&lt;li&gt;SQL editor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Supported platforms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux,&lt;/li&gt;
&lt;li&gt;Windows,&lt;/li&gt;
&lt;li&gt;macOS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DBeaver is easy to install and to connect to a database. It runs as a desktop application, which is good for beginners as no CLI proficiency is required to get started.&lt;/li&gt;
&lt;li&gt;You can run SQL queries even without strong SQL skills.&lt;/li&gt;
&lt;li&gt;It comes with strong features to view and manipulate your data.&lt;/li&gt;
&lt;li&gt;Users praise its predictive typing and claim DBeaver saves them a lot of time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Some users complain about old school-looking UI.&lt;/li&gt;
&lt;li&gt;The fact DBeaver runs locally, as a desktop application, may also decrease its performance. To tackle this problem, you need to switch to an enterprise plan.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  dbForge Studio
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.devart.com/dbforge/" rel="noopener noreferrer"&gt;dbForge Studio&lt;/a&gt; is a fully-featured GUI tool to develop, manage, and administer MariaDB and MySQL databases. It is developed by Devart, one of the leading developers of database management software, ALM solutions, and data providers for the most popular database servers. dbForge is a full-fledged MariaDB (and MySQL) GUI that is used to create and execute queries, analyze data, compare and synchronize databases, and much more. dbForge Studio is not available for free, the pricing starts at $179.95 per year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9y4umrynztypzwfl2zv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl9y4umrynztypzwfl2zv.png" alt="dbForge Studio for MariaDB."&gt;&lt;/a&gt;&lt;br&gt;
dbForge Studio for MariaDB. Source: &lt;a href="https://www.devart.com/" rel="noopener noreferrer"&gt;https://www.devart.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Intelligent SQL Coding,&lt;/li&gt;
&lt;li&gt;Database compare and sync,&lt;/li&gt;
&lt;li&gt;Data import and export,&lt;/li&gt;
&lt;li&gt;Database copying, designer, refactoring, data generator, administration, backup, migration,&lt;/li&gt;
&lt;li&gt;Query profiling,&lt;/li&gt;
&lt;li&gt;Visual query builder,&lt;/li&gt;
&lt;li&gt;MySQL debugger,&lt;/li&gt;
&lt;li&gt;Table designer,&lt;/li&gt;
&lt;li&gt;Reports and analytics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Supported platforms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dbForge Studio is a powerful GUI tool with a rich visual design, and an intuitive UI.&lt;/li&gt;
&lt;li&gt;Users praise its SQL editor, code suggestions, stability, and a user-friendly interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;dbForge Studio is not officially available for Linux and MacOs.&lt;/li&gt;
&lt;li&gt;It is neither free nor open source, but there is a 30-day free trial.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  DbSchema
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://dbschema.com/" rel="noopener noreferrer"&gt;DbSchema&lt;/a&gt; is a visual database design and management tool for all relational and a few No-SQL databases. It claims to help with design, documenting and managing databases without having to be an SQL expert, as the schema can be edited with a few clicks, without writing complex SQL queries. DbSchema is reverse-engineering the database schema and visualizing it as diagrams. After 15 days of a free trial, the price of DbSchema starts at $98 for academic purposes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlb9x699gn98dginr8gj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlb9x699gn98dginr8gj.png" alt="DB Schema dor MariaDB. "&gt;&lt;/a&gt;&lt;br&gt;
DB Schema dor MariaDB. Source: &lt;a href="https://dbschema.com/" rel="noopener noreferrer"&gt;https://dbschema.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logical &amp;amp; physical design,&lt;/li&gt;
&lt;li&gt;Interactive diagrams,&lt;/li&gt;
&lt;li&gt;Generating interactive HTML5 documentation,&lt;/li&gt;
&lt;li&gt;Schema synchronization,&lt;/li&gt;
&lt;li&gt;Visual query builder,&lt;/li&gt;
&lt;li&gt;Relational data editor,&lt;/li&gt;
&lt;li&gt;Editing and executing SQL queries,&lt;/li&gt;
&lt;li&gt;CSV editor for large files,&lt;/li&gt;
&lt;li&gt;Database reports &amp;amp; charts,&lt;/li&gt;
&lt;li&gt;Automating schema deployment &amp;amp; tasks,&lt;/li&gt;
&lt;li&gt;Dark theme, and more.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Supported platforms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux,&lt;/li&gt;
&lt;li&gt;Windows,&lt;/li&gt;
&lt;li&gt;macOS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DbSchema’s users praise it for supporting multiple databases, simple and intuitive UI, and useful but not overly complicated features.&lt;/li&gt;
&lt;li&gt;It uses a copy of schema structure, which is independent and separated from the MariaDb database. DbSchema can handle large databases with more than 10.000 tables. Connecting to another database won't change the model schema unless you choose to refresh it from the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The free version is limited.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Navicat for MariaDB
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.navicat.com/en/products/navicat-for-mariadb" rel="noopener noreferrer"&gt;Navicat&lt;/a&gt; is a graphical front-end for MariaDB. It is compatible with all versions of MariaDB and with MySQL 3.21 and above. It is a part of a bigger Navicat ecosystem of products like Navicat Premium (a multi-connection database development and administration tool which can simultaneously connect 7 databases), Navicat for MySQL, Navicat for MongoDB, Navicat for Oracle, and more. All of them are commercial tools, with pricing that starts at $119.00 per user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facqt8fymubbzl6orf9km.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Facqt8fymubbzl6orf9km.png" alt="Navicat for MariaDB."&gt;&lt;/a&gt;&lt;br&gt;
Navicat for MariaDB. Source: &lt;a href="https://www.navicat.com/" rel="noopener noreferrer"&gt;https://www.navicat.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Supported platforms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux,&lt;/li&gt;
&lt;li&gt;Windows,&lt;/li&gt;
&lt;li&gt;macOS&lt;/li&gt;
&lt;li&gt;iOS.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Basic features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL processing: SQL editor, find and replace, create parameter queries, open query files in an external editor, console.&lt;/li&gt;
&lt;li&gt;Data Viewer and Editor: grid view; Text, Hex, Image or Web viewer/editor, raw mode editing, filter records.&lt;/li&gt;
&lt;li&gt;Import/export data from/to plain text file formats: TXT, CSV, XML, JSON&lt;/li&gt;
&lt;li&gt;Dump/Execute SQL file&lt;/li&gt;
&lt;li&gt;Collaboration: create projects, add members&lt;/li&gt;
&lt;li&gt;Synchronize connections and queries&lt;/li&gt;
&lt;li&gt;More features are available in higher plans. Check Navicat for MariaDB’s website for the complete feature matrix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;As a commercial product, it comes with more features than most of its open-source counterparts.&lt;/li&gt;
&lt;li&gt;Navicat is user-friendly, users like its modern UI, and the fact that Navicat is very quick and easy to get started with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navicat’s pricing can be a blocker for smaller projects.&lt;/li&gt;
&lt;li&gt;It tends to be resource-intensive.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  HeidiSQL
&lt;/h2&gt;

&lt;p&gt;HeidiSQL is a free open source tool initially built for MariaDB and MySQL, and now also supporting PostgreSQL, MicrosoftSQL, and SQLite. HeidiSQL is only available for Windows, as a Windows app, which doesn’t prevent it from being ranked as one of the most popular tools for MariaDB and MySQL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54b5kf6h3jpv88oaycii.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54b5kf6h3jpv88oaycii.png" alt="HeidiSQL UI. "&gt;&lt;/a&gt;&lt;br&gt;
HeidiSQL UI. Source: &lt;a href="https://www.heidisql.com/screenshots.php?which=database" rel="noopener noreferrer"&gt;https://www.heidisql.com/screenshots.php?which=database&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting to multiple servers in one window.&lt;/li&gt;
&lt;li&gt;Connect to servers via command line.&lt;/li&gt;
&lt;li&gt;Creating and edit tables, views, stored routines, triggers and scheduled events,&lt;/li&gt;
&lt;li&gt;Exporting from one server/database directly to another server/database.&lt;/li&gt;
&lt;li&gt;Managing user-privileges.&lt;/li&gt;
&lt;li&gt;Exporting table rows as CSV, HTML, XML, SQL, LaTeX, Wiki Markup and PHP Array.&lt;/li&gt;
&lt;li&gt;Browsing and editing table-data using a comfortable grid.&lt;/li&gt;
&lt;li&gt;Bulk edit tables (move to db, change engine, collation etc.).&lt;/li&gt;
&lt;li&gt;Writing queries with customizable syntax-highlighting and code-completion.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Supported platforms:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For non-English speakers, HeidiSQL is available in 22 other languages.&lt;/li&gt;
&lt;li&gt;It’s a very good lightweight tool for managing several databases at the same time.&lt;/li&gt;
&lt;li&gt;It’s free and open source.&lt;/li&gt;
&lt;li&gt;HeidiSQL is easy to install as a Windows app and to use.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;According to some users, HeidiSQL is buggy and it doesn’t provide advanced debugging features.&lt;/li&gt;
&lt;li&gt;Low stability. Despite the wide popularity, HeidiSQL is known for bugs and issues.&lt;/li&gt;
&lt;li&gt;It is only available for Windows, just like dbForge Studio&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  MariaDB GUI tool or MariaDB admin panel?
&lt;/h2&gt;

&lt;p&gt;Admin panels, internal tools, and database GUI tools are often used interchangeably. After all, their main functionalities are similar – all allow accessing data and performing at least basic CRUD operations. Database GUI clients give their users full control over their data but they need to operate on raw SQL queries, which is a blocker for non-technical users. If it’s not an issue, and/or a database GUI tool is used infrequently, mostly for firefighting, you may not need a fully-featured admin panel.&lt;/p&gt;

&lt;p&gt;The situation changes when sales, operations, customer support, marketing, and other, typically non-technical teams need secure access to data to perform their day-to-day activities in an efficient manner. Internal tools like admin panels offer much more functionalities, including roles and permissions management, approval workflows, adding data, creating visual dashboards, editing content, contacting users, validating documents, sharing internal tools with external partners, and so on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forest Admin - a MariaDB admin panel
&lt;/h2&gt;

&lt;p&gt;Forest Admin belongs to the second category. As a fully-featured admin panel solution, it can act as a database GUI, or easily become a powerful internal tool that fits every business logic. Unlike competitors, Forest Admin doesn’t just provide the UI, but it scans the data structure and generates a fully-functional admin panel with all basic features like CRUD, search, export, and more, out-of-the-box. Then, you can customize it according to your needs. Thanks to its unique architecture, Forest Admin can never access user data, which stays on their servers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9b079p3ub7q3tak1w7b9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9b079p3ub7q3tak1w7b9.png" alt="Forest Admin UI with out-of-the-box features like search and filters. "&gt;&lt;/a&gt;&lt;br&gt;
Forest Admin UI with out-of-the-box features like search and filters. Source: &lt;a href="https://www.forestadmin.com/usecases" rel="noopener noreferrer"&gt;https://www.forestadmin.com/usecases&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are 2 ways of installing Forest Admin – by connecting it to an existing app (built in Django, ExpressJS, Laravel, NestJS, Ruby on Rails, and more integrations are on the way) or directly to a database. At the moment, Forest Admin is available for MariaDB, MySQL, PostgreSQL, MicrosoftSQL Server, and MongoDB. And here is what one of our users has recently told us:&lt;/p&gt;

&lt;p&gt;I really appreciate how easy ForestAdmin makes it to make frequent DB schema changes without breaking the UI. I haven't heard of any other tools that are able to handle schema changes so well!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As you can see, there is no shortage of database tools. Some provide basic functionality, while others offer advanced all-in-one tools used by thousands of team members to manipulate the data. There are also solutions like Forest Admin that let you quickly start with a small project and then easily scale it once it grows. If you want to give it a try, &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-mariadb-gui-tools&amp;amp;utm_content=blog-mariadb-gui-tools" rel="noopener noreferrer"&gt;get started for free today&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mariadb</category>
      <category>database</category>
      <category>gui</category>
      <category>sql</category>
    </item>
    <item>
      <title>NestJS vs ExpressJS: Which is better for your project</title>
      <dc:creator>Monika Ambrozowicz</dc:creator>
      <pubDate>Mon, 11 Jul 2022 13:08:22 +0000</pubDate>
      <link>https://dev.to/forestadmin/nestjs-vs-expressjs-which-is-better-for-your-project-bbl</link>
      <guid>https://dev.to/forestadmin/nestjs-vs-expressjs-which-is-better-for-your-project-bbl</guid>
      <description>&lt;p&gt;Rumour has it that ExpressJS has been slowly declining in popularity. Although the latest results of Stack Overflow’s 2022 survey don’t seem to prove it, it’s true that Express has gained serious competitors. NestJS, Koa, Fastify, and other frameworks are becoming more popular, and product managers tend to debate whether to build their next project with ExpressJS, or rather give new (yet already mature) frameworks a chance.&lt;/p&gt;

&lt;p&gt;Forest Admin is compatible with apps built with &lt;a href="https://www.forestadmin.com/integrations/express?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-express-vs-nest&amp;amp;utm_content=expressjs-lp"&gt;ExpressJS&lt;/a&gt;, &lt;a href="https://www.forestadmin.com/integrations/nestjs?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-express-vs-nest&amp;amp;utm_content=nestjs-lp"&gt;NestJS&lt;/a&gt;, and soon it will also be available for Koa and Fastify developers. In this article, we compare ExpressJS with NestJS to help you choose the best framework for your application, as some of the differences between them are fundamental.&lt;/p&gt;

&lt;h2&gt;
  
  
  ExpressJS: Lightweight and the most widely-used
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://survey.stackoverflow.co/2022/#most-popular-technologies-webframe"&gt;Stack Overflow’s 2022 survey&lt;/a&gt;, ExpressJS is still among the most widely used web frameworks, and it is considered a very rational choice to build large-scale applications with. Express is a JavaScript framework, so both the frontend and the backend can be built using the same (extremely popular) language.&lt;/p&gt;

&lt;p&gt;One of the biggest strengths of Express is its strong community and the number of available plugins. For example, storing sessions, cookies, parsing a payload, and so on, are available out-of-the-box, and it takes much less time and lines of code to build an application with this framework. Another big advantage of Express is that it is supported with the Google V8 engine, which ensures high performance without lags or errors in the processing.&lt;/p&gt;

&lt;h2&gt;
  
  
  NestJS: Reliable and scalable
&lt;/h2&gt;

&lt;p&gt;Finally, ExpressJS is considered lightweight and straightforward. Its popularity and a strong community makes it easier not only to find resources but also support.&lt;/p&gt;

&lt;p&gt;NestJS is a rapidly growing NodeJS framework, and it seems the growing number of developers prefers it over ExpressJS. It serves the same purpose – to build efficient, reliable and scalable server-side applications – but it does it in a very different way.&lt;/p&gt;

&lt;p&gt;NestJS is inspired by Angular, which is a big advantage for developers who are already familiar with it. At the same time, everything supported in Express, for example Express functions, is also supported in Nest, which makes switching from one framework to another easier.&lt;/p&gt;

&lt;p&gt;A big advantage of NestJS is that it is built with TypeScript, which makes the application reliable and less prone to bugs. It makes NestJS a particularly good choice for building large-scale applications. However, using JavaScript is also possible with Nest.&lt;/p&gt;

&lt;h2&gt;
  
  
  ExpressJS vs. NestJS
&lt;/h2&gt;

&lt;p&gt;The biggest difference between these frameworks is that NestJS is opinionated, and ExpressJS is not. It means Express gives developers the freedom to make multiple possibilities and implement code as per the need, as it doesn’t have a set of pre-defined rules to follow. Such a flexibility is appreciated by many developers, and it’s beneficial for smaller flexible teams, but once team size and app’s complexity grows, the lack of structure becomes a problem.&lt;/p&gt;

&lt;p&gt;NestJS, on the other hand, uses the “convention over configuration” paradigm that attempts to decrease the number of decisions developers need to make, and it is expected of them to write the repos, service, and controllers in a specific manner.&lt;/p&gt;

&lt;p&gt;On top of that, NestJS follows the MVC architecture with components like modules, controllers, and providers, used to control logic, data, and implement the UI. ExpressJS doesn’t follow MVC, which in some projects leads to ineffectiveness and inefficiency due to the lack of structure.&lt;/p&gt;

&lt;p&gt;Despite these differences, both Express and Nest are suitable frameworks for building single-page applications, e-commerce websites, fintech, and streaming applications. Both are &lt;a href="https://github.com/VanoDevium/node-framework-stars"&gt;the most widely-used Node.js frameworks&lt;/a&gt;, and although Express is more popular (57k stars on Github compared to 48k given to NestJS), the popularity of Nest is growing faster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forest Admin for ExpressJS &amp;amp; NestJS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DQGoFleC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obx7q2q4v05g920ytjbs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DQGoFleC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obx7q2q4v05g920ytjbs.png" alt="Admin panel built with Forest Admin" width="880" height="459"&gt;&lt;/a&gt;&lt;br&gt;
An example of an admin panel built with Forest Admin. Source: Live Demo, Forest Admin has no access to user data!&lt;/p&gt;

&lt;p&gt;Whether you choose building your web application with ExpressJS or NestJS, you can still equip it with a powerful admin panel thanks to Forest Admin. However, the choice between Express and Nest will impact the way you integrate it with Forest Admin, as our brand new NestJS integration has been built in a recently developed way, with lots of new benefits, such as:&lt;/p&gt;

&lt;p&gt;Low code customization. You will write less code, only when you really need to do it. Forest Admin magic will do the rest, without compromising on data security. It is also true if you choose Express, but requires a bit more coding.&lt;br&gt;
Clearer concepts. We no longer distinguish between collections and smart collections, relationships and smart relationships, etc. Forest Admin for NestJS/SQL has collections, relationships, fields, and so on. Easier concepts means faster and hassle-free customization.&lt;br&gt;
Always in sync with your database. Thanks to Forest Admin SQL integration, each time your server restarts, your admin panel UI is in-sync with your database.&lt;/p&gt;

&lt;p&gt;We strongly recommend giving Forest Admin for NestJS a try, but our integration with Express is equally reliable and it has been tested by a thousand of users. Whether you need a robust and flexible admin panel for an Express, Nest, (and soon also Koa or Fastify) app, &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-express-vs-nest"&gt;get started with Forest Admin for free&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>nestjs</category>
      <category>express</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The guide to Laravel admin panels</title>
      <dc:creator>Monika Ambrozowicz</dc:creator>
      <pubDate>Mon, 23 May 2022 11:35:57 +0000</pubDate>
      <link>https://dev.to/forestadmin/the-guide-to-laravel-admin-panels-2g5j</link>
      <guid>https://dev.to/forestadmin/the-guide-to-laravel-admin-panels-2g5j</guid>
      <description>&lt;p&gt;Are you researching different options to ship an admin panel for your Laravel application? One idea would be to build it from scratch with Laravel. After all, this PHP-based framework facilitates building various products, including internal tools.&lt;/p&gt;

&lt;p&gt;Where is the catch, then? Well… You’ll have to engage not only Laravel developers but also UX, Design, and Product. Otherwise, you risk equipping your business teams with inefficient tools and jeopardizing their productivity. Even the founders of Laravel have thought about it and created Laravel Nova with out-of-the-box functionalities like CRUD interface, search, filters, notifications, and more. But is Laravel Nova the only option you have? Not at all. We have tested and compared other admin panel solutions for Laravel to help you make an informed choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Types of Laravel admin panels
&lt;/h2&gt;

&lt;p&gt;Before diving in, let’s have a quick look at different types of Laravel admin panels because it is important to differentiate back-end CRUD interfaces from visual builders and admin panel templates.&lt;/p&gt;

&lt;h3&gt;
  
  
  Visual builders
&lt;/h3&gt;

&lt;p&gt;Thanks to visual UI builders, you can create and manage your admin panel directly from the no-code GUI, typically using drag-and-drop builders. They remind CMS systems but usually, visual admin panel builders offer more functionalities than adding and updating content.&lt;/p&gt;

&lt;p&gt;Visual builders are useful when your team is small and there are either no developers who can manage internal tools, or when you want to give non-technical business teams the ownership of the tools they use. However, keep in mind that no-code builders typically have limited customization options.&lt;/p&gt;

&lt;p&gt;In the next section, you will find a detailed description of visual builders for Laravel admin panels, such as Voyager and Backpack DevTools.&lt;/p&gt;

&lt;h3&gt;
  
  
  CRUD interfaces
&lt;/h3&gt;

&lt;p&gt;CRUD operations are the fundament of internal tools. That’s because these days it’s hard to find an application that involves users and/or data that doesn’t interact with a database. Every user that makes an edit to an item in the system, adds a new one or deletes data that is no longer necessary, performs one of the CRUD (create, read, update, delete) operations.&lt;/p&gt;

&lt;p&gt;A CRUD interface can be built from scratch, but there are many solutions that gives it out-of-the-box. In the next section, you will learn about the most popular packages for Laravel, such as Laravel Nova, Filament, Backpack, and Quick Admin Panel.&lt;/p&gt;

&lt;h2&gt;
  
  
  The most popular Laravel admin panels
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Laravel Nova
&lt;/h3&gt;

&lt;p&gt;Nova is the official admin panel for Laravel, built by Laravel’s creators. It is powered by Vue.js, Vue Router, and Tailwind.css on the front-end, and configured using simple PHP classes on the back-end, which fits the Laravel ecosystem very well. Its primary features include a full CRUD interface, search and filters, graphs and metrics, authorisation, notifications, conditional fields, and more. Additional functionalities are shipped by the community as open-source packages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0sgup173r14skrcr7n0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0sgup173r14skrcr7n0.png" alt="Laravel Nova dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel Nova: Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel Nova has been built and maintained by the Laravel team so it fits the ecosystem, its design and features.&lt;/li&gt;
&lt;li&gt;The UI is clean and user-friendly.&lt;/li&gt;
&lt;li&gt;It fits big enterprise projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Laravel Nova: Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Laravel Nova is not available for free. There is no free trial either but you will get reimbursed if you cancel your license in the first 14 days.&lt;/li&gt;
&lt;li&gt;Laravel Nova is not a low code solution. Using it to build internal tools is faster than doing it from scratch but still, it requires some coding and the knowledge of Laravel, PHP, and composer. It also means Laravel Nova can’t be edited and adjusted by non-technical team members.&lt;/li&gt;
&lt;li&gt;The out-of-the-box features are hard to customize.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Filament
&lt;/h3&gt;

&lt;p&gt;Unlike other solutions from this article, Filament doesn’t advertise as an admin panel or internal tool solution but as a collection of tools for rapidly building beautiful TALL (tailwindccc, Alpine.js, Laravel, Livewire) stack apps. It has an admin panel, a table builder, and a form builder. The Filament community is also creating packages with complementary features like custom fields, different integrations, charts, and much more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfypzzp8rkq0iequu6gp.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfypzzp8rkq0iequu6gp.jpeg" alt="Filament admin table view"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Filament: Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Filament is an open-source project with a strong community that keeps building packages and supporting other Filament users.&lt;/li&gt;
&lt;li&gt;It is a clean and simple solution that makes it possible to get an up and running admin panel in a few minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Filament: Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There is a simple feature for roles but Filament doesn’t allow to setup a more complex system for teams and permissions.&lt;/li&gt;
&lt;li&gt;There is no visual layout editor, which doesn’t allow non-tech team members to customize the tool they use on a daily basis.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Backpack
&lt;/h3&gt;

&lt;p&gt;Backpack is another popular solution for shipping a Laravel admin panel. It requires a minimal technology stack of Laravel, Bootstrap, and jQuery to customize everything in Backpack. On top of that, it’s possible (but not required) to use Vue, React, Webpack, Mix, Less, Saass, NPM, and more.&lt;/p&gt;

&lt;p&gt;Backpack has two core packages: Backpack\CRUD that accelerates the process of building CRUD interfaces, and Backpack\Base responsible for login, password reset, error pages, and so on. However, it is also modular and easy to extend, which makes it a powerful solution, also for complex apps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0m0r9330tekjpognvbt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0m0r9330tekjpognvbt.png" alt="Backpack admin panel"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel Backpack: Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backpack gives Laravel developers a lot of customization opportunities, much more compared to Nova and Filament.&lt;/li&gt;
&lt;li&gt;Filters are powerful and can be easily implemented.&lt;/li&gt;
&lt;li&gt;Clear and detailed documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Laravel Backpack: Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Backpack is not free for any commercial use.&lt;/li&gt;
&lt;li&gt;Its customization opportunities are a double-edged sword as every change requires quite a lot of manual coding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Voyager
&lt;/h2&gt;

&lt;p&gt;Voyager is called the Missing Laravel Admin, probably because unlike Nova, Filament, and Backpack, Voyager is a visual builder that makes it easy to use by junior devs and those with limited coding skills. Voyager has six main features: Media Manager (similar to what we know from WordPress), Menu Builder (allowing to quickly add, edit, and delete menu items), Database Manager (an alternative to Laravel’s Schema), a BREAD/CRUD builder that allows to Browse, Read, Edit, Add, and Delete entries and views of any table in the database, Settings, and Compass that helps with Voyager resources.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsl94gu4nsv7gw32uh3oh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsl94gu4nsv7gw32uh3oh.png" alt="Voyager BREAD editor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Laravel Voyager: Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to start with and use, clear documentation and a strong community.&lt;/li&gt;
&lt;li&gt;It’s free and open source.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Laravel Voyager: Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The UI, which makes it so easy to manage, is also limiting.&lt;/li&gt;
&lt;li&gt;It doesn’t fit complex apps that require setting up role-based permissions, approval workflows, and other less typical features.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Quick Admin Panel
&lt;/h3&gt;

&lt;p&gt;Quick Admin Panel is an online internal tool generator for Laravel apps. To get started, you need to sign up on the website, create a project, and add chosen functionalities, such as menus, fields, and relationships. Then, Quick Admin Panel will generate Laravel files that need to be downloaded and installed just like any other Laravel project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72vrw7jt25zz5sgckivb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F72vrw7jt25zz5sgckivb.png" alt="Quick admin panel interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick Admin Panel: Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quick Admin Panel is, as the name suggests, quick. Even the website hints that it’s a good choice for an MVP, a first version of a new Laravel project.&lt;/li&gt;
&lt;li&gt;Quick Admin Panel generates Laravel code and files, and everything can be customized later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick Admin Panel: Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your needs and models need to be defined upfront, before Quick Admin Panel is generated.&lt;/li&gt;
&lt;li&gt;Further customization requires a lot of manual coding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Forest Admin for Laravel: An all-in-one Laravel admin panel
&lt;/h2&gt;

&lt;p&gt;Last but not least, Forest Admin has recently gained a new integration, and now it’s also available for Laravel. It takes the best of both worlds: With Forest Admin, you get both a CRUD interface out-of-the box, you are free to add functionalities that fit your specific business scenarios, and finally, it has a UI layout editor for non-technical team members.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-eu-west-1.amazonaws.com%2Fblog.forestadmin.com%2F2022%2F05%2Fforest-admin-new-ui-companies1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-eu-west-1.amazonaws.com%2Fblog.forestadmin.com%2F2022%2F05%2Fforest-admin-new-ui-companies1.png" alt="Forest Admin as a KYC solution"&gt;&lt;/a&gt;&lt;br&gt;
Forest Admin set up as a KYC solution&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-eu-west-1.amazonaws.com%2Fblog.forestadmin.com%2F2022%2F05%2Fforest-admin-layout-editor-mobility.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fs3-eu-west-1.amazonaws.com%2Fblog.forestadmin.com%2F2022%2F05%2Fforest-admin-layout-editor-mobility.png" alt="Forest Admin: A drag-and-drop layout editor"&gt;&lt;/a&gt;&lt;br&gt;
Forest Admin: A drag-and-drop layout editor&lt;/p&gt;

&lt;p&gt;Here is what else makes it different from the solutions listed above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forest Admin has a unique &lt;a href="https://blog.forestadmin.com/hybrid-saas-architecture/?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-laravel-admin-panels" rel="noopener noreferrer"&gt;hybrid architecture&lt;/a&gt;. Only the frontend is managed on Forest Admin servers, so your customer data remain invisible to Forest Admin. It gives you the flexibility of a no-code SaaS tool without compromising on data security.&lt;/li&gt;
&lt;li&gt;Once you install Forest Admin, you get more than 30 features out-of-the-box: CRUD, search and filters, role-based permissions, approval workflows, low code components for chars, etc. Then, you’re free to customize your admin panel by implementing your own actions, visualizing data after applying a specific set of conditions, mirroring your business operations, building virtual relationships between collections, computing data on the go, and more.&lt;/li&gt;
&lt;li&gt;Thanks to an intuitive drag and drop UI editor and recently released &lt;a href="https://blog.forestadmin.com/forest-admin-workspaces/?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-laravel-admin-panels" rel="noopener noreferrer"&gt;Workspaces&lt;/a&gt;, Forest Admin can be managed by non-technical team members, who typically use it on a daily basis.&lt;/li&gt;
&lt;li&gt;Forest Admin is scalable, so you don’t need to worry about what happens if you start with an MVP and then celebrate the exponential growth. Forest Admin is used by new startups, established unicorns and all types of companies in between.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As you can see, if you’re not eager to build an admin panel for your Laravel app from scratch, you’re not alone. The Laravel community has already created a couple of user-friendly and efficient solutions, including those that I didn’t mention in this article, like Admin Architect, Argon, InfyOm Laravel Generator, LaraAdmin, Orchid, and many more. The choice is not easy, but answering these questions will help you make the decision:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do you have enough resources in development, product, UX, and design in order to build a Laravel admin panel from scratch?&lt;/li&gt;
&lt;li&gt;Do you want non-technical team members take ownership of their tools?&lt;/li&gt;
&lt;li&gt;Do you need to create a quick MVP or do you need an admin panel that will scale from a few to thousands of users?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope this article gave you an overview of different ways of building internal tools for your Laravel application. If you decide to give Forest Admin a try, &lt;a href="https://app.forestadmin.com/signup?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=blog-laravel-admin-panels" rel="noopener noreferrer"&gt;sign up for free&lt;/a&gt; and try it yourself.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>webdev</category>
      <category>database</category>
    </item>
    <item>
      <title>MongoDB Cheat Sheet</title>
      <dc:creator>Matthieu Blandineau</dc:creator>
      <pubDate>Mon, 23 May 2022 11:35:05 +0000</pubDate>
      <link>https://dev.to/forestadmin/mongodb-cheat-sheet-2bf1</link>
      <guid>https://dev.to/forestadmin/mongodb-cheat-sheet-2bf1</guid>
      <description>&lt;p&gt;We gathered a list of handy MongoDB and mongosh commands and queries when working with MongoDB databases. Please ping us &lt;a href="https://twitter.com/ForestAdmin"&gt;@ForestAdmin&lt;/a&gt; if you’d like to add something to the cheat sheet!&lt;/p&gt;

&lt;p&gt;This is the second post from our Cheat Sheets series following the &lt;a href="https://blog.forestadmin.com/postgresql-cheat-sheet/"&gt;PostgreSQL&lt;/a&gt; one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with MongoDB
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.mongodb.com/docs/mongodb-shell/install/#std-label-mdb-shell-install"&gt;Install MongoDB Shell mongosh&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Login and enter MongoDB Shell mongosh&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mongosh
//OR
$ mongosh "mongodb://localhost:27017"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;List MongoDB databases&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;show dbs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Connect to MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Exit MongoDB Shell mongosh&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;quit()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Managing MongoDB
&lt;/h2&gt;

&lt;p&gt;Check MongoDB version&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.version()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Check if MongoDB is running&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pgrep -fa -- -D | grep mongo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Restart MongoDB on Linux&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.shutdownServer()
$ sudo systemctl start mongodb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Restart MongoDB on Mac OSX&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ brew services stop mongodb-community@yourMongodbVersionNumber
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Restart MongoDB on Windows&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Winkey + R
Type "services.msc"
Search "MondoDb"
Click "restart"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Change MongoDB user password&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.changeUserPassword(username, NewPassword)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Exit from mongosh&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;quit()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Interacting with MongoDB databases
&lt;/h2&gt;

&lt;p&gt;List MongoDB databases&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;show dbs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Connect or switch to MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Create new MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;use newDatabaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Show name of the current database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getName()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.dropDatabase()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Rename MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mongodump -d oldDatabaseName path
$ mongorestore -d newDatabaseName path/oldDatabaseName.bson
$ mongosh
use oldDatabaseName
db.dropDatabase()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Interacting with MongoDB collections
&lt;/h2&gt;

&lt;p&gt;List MongoDB collections&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;show collections
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Describe MongoDB collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getCollectionInfos( { name: "collectionName" } )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Describe all collections in MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getCollectionInfos()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Create MongoDB collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.createCollection("collectionName", options)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete MongoDB collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.drop()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Rename MongoDB collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.oldCollectionName.renameCollection("newCollectionName")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Interacting with MongoDB indexes
&lt;/h2&gt;

&lt;p&gt;List MongoDB indexes in a collection&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.getIndexes()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Create a MongoDB index in a collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.createIndex(keys, options, commitQuorum)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Create multiple MongoDB indexes in a collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.createIndexes( [ keyPatterns ], options, commitQuorum )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete MongoDB index&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.dropIndex("indexName")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete all indexes in MongoDB collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collection.dropIndexes()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Rebuild MongoDB indexes&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collection.reIndex()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Interacting with MongoDB documents
&lt;/h2&gt;

&lt;p&gt;Count documents in a MongoDB collection&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.countDocuments()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;List all documents in a MongoDB collection&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.find().toArray()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Create document in MongoDB&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.insertOne(
   &amp;lt;document&amp;gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Display a document in MongoDB&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.find({ "_id": documentID })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Update a document in MongoDB&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.updateOne(
    { "_id": documentID },
    &amp;lt;update&amp;gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete a document in MongoDB&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.deleteOne({ "_id": documentID })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Replace a document in MongoDB&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.collectionName.replaceOne(
    { "_id": documentID },
    &amp;lt;replacement&amp;gt;
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Backup and restore MongoDB database
&lt;/h2&gt;

&lt;p&gt;Backup MongoDB database&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mongodump -d oldDatabaseName path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Restore MongoDB database&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ mongorestore -d newDatabaseName path/oldDatabaseName.bson
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Managing roles, users and permissions in MongoDB
&lt;/h2&gt;

&lt;p&gt;List MongoDB roles&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.getRoles(
    {
      rolesInfo: 1
    }
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Create MongoDB user&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.createUser(
    {
        user: "userName",

        pwd: "userPassword",

        roles:[{role: "roleName" , db:"databaseName"}]
    }
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Delete MongoDB user&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.dropUser(userName)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Change MongoDB user password&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db.changeUserPassword(userName, newPassword)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;&lt;em&gt;Need to build admin panels or a GUI tool for MongoDB?&lt;/em&gt; &lt;a href="https://www.forestadmin.com/integrations/mongodb"&gt;&lt;em&gt;Check out Forest Admin for MongoDB&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>database</category>
      <category>mongodb</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Most popular PostgreSQL GUIs in 2022: the (almost) scientific list</title>
      <dc:creator>Matthieu Blandineau</dc:creator>
      <pubDate>Tue, 17 May 2022 12:12:03 +0000</pubDate>
      <link>https://dev.to/forestadmin/most-popular-postgresql-guis-in-2022-the-almost-scientific-list-3e22</link>
      <guid>https://dev.to/forestadmin/most-popular-postgresql-guis-in-2022-the-almost-scientific-list-3e22</guid>
      <description>&lt;p&gt;Wjether you're starting with PostgreSQL (in which case you might fancy a &lt;a href="https://blog.forestadmin.com/postgresql-cheat-sheet/"&gt;cheat sheet&lt;/a&gt;) and looking for the best postgres GUI or postgres client to get started, or you're a veteran (in which case ... you might also fancy a &lt;a href="https://blog.forestadmin.com/postgresql-cheat-sheet/"&gt;cheat sheet&lt;/a&gt;!) and you've hit the limit of your current tool — or you just can't stand it anymore, this list is for you. We've compiled the most popular postgreSQL GUIs and clients &lt;strong&gt;among your postgres developers peers.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before we jump in, a few words about the methodology: we started from the list of PostgreSQL clients referenced on the &lt;a href="https://wiki.postgresql.org/wiki/PostgreSQL_Clients"&gt;PostgreSQL official wiki&lt;/a&gt;. For each client, we looked at the number of occurrences of their name in &lt;a href="https://www.reddit.com/r/PostgreSQL/"&gt;r/PostgreSQL&lt;/a&gt; discussions and comments. Of course, this methodology has some limitations, including: r/PostgreSQL developers are not &lt;em&gt;all&lt;/em&gt; the PostgreSQL developers in the world and we only count the postgres clients mentions, not whether a mention is positive or negative. So it's not a list of "best postgres GUIs". But what's a &lt;em&gt;best&lt;/em&gt; postgres GUI anyway, as its value will most likely depend on your needs? Let's start&lt;/p&gt;

&lt;h2&gt;
  
  
  1. pgAdmin
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---sjcjphF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---sjcjphF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-3.png" alt="pgAdmin postgres client" width="880" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pgadmin.org/"&gt;pgAdmin&lt;/a&gt; is the most popular PostgreSQL GUI. It is purpose built for Postgres and supports all its features and operations. pgAdmin is open source and also supports Postgres derivative databases such as &lt;a href="https://www.enterprisedb.com/product-compatibility"&gt;EDB Postgres Advanced Server&lt;/a&gt;. You can test it live &lt;a href="https://www.katacoda.com/enterprisedb/scenarios/pgadmin-sandbox"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;pgAdmin supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can install pgAdmin on&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then access it locally or over internet via your navigator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  You can run pgAdmin as a web application, on your computer or on any server, meaning you can use pgAdmin to access and manage distributed Postgres databases, from anywhere.&lt;/li&gt;
&lt;li&gt;  pgAdmin allows you to create, read and edit all PostgreSQL objects&lt;/li&gt;
&lt;li&gt;  You can easily rearrange its UI&lt;/li&gt;
&lt;li&gt;  pgAdmin offers advanced server monitoring capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  pgAdmin isn't as straight forward to install on your desktop as other postgres clients&lt;/li&gt;
&lt;li&gt;  pgAdmin is more suited for administrating your PostgreSQL than developing on it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;pgAdmin pricing:&lt;/strong&gt; pgAdmin is free and open source&lt;/p&gt;

&lt;h2&gt;
  
  
  2. DBeaver
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--biTN05u---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--biTN05u---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-4.png" alt="DBeaver postgres client" width="880" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dbeaver.io/"&gt;DBeaver&lt;/a&gt; is a widely used multi database GUI tool, particularly popular among postgreSQL developers. Just like pgAdmin, it's open source. In addition to postgreSQL, it supports MySQL, PostgreSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS Access, Teradata, Firebird, Apache Hive, Phoenix, Presto, and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DBeaver supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  DBeaver is super easy to install as a desktop application, and to connect to your PostgreSQL database&lt;/li&gt;
&lt;li&gt;  DBeaver offers a visual query builder to create advanced SQL queries without advanced (or any) knowledge of SQL&lt;/li&gt;
&lt;li&gt;  It comes with strong data access, search, visualization and edition capabilities&lt;/li&gt;
&lt;li&gt;  DBeaver also offers a fake data generator to populate your database and test it and the applications built on it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  DBeaver runs locally and is sometimes resource intensive, which can lead to performance issues&lt;/li&gt;
&lt;li&gt;  And that's pretty much it! Other than that, PostgreSQL DBeaver users haven't expressed strong concerns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DBeaver pricing:&lt;/strong&gt; DBeaver is free and open source&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Postico
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S8Z2set8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S8Z2set8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-5.png" alt="Postico PostgreSQL client" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://eggerapps.at/postico/"&gt;Postico&lt;/a&gt; is macOS PostgreSQL client for reading data, doing basic manual data entry and editing your database structure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Postico supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Postico is extremely straight forward to execute basic tasks over your PostgreSQL database&lt;/li&gt;
&lt;li&gt;  Postico easy to install and to securely connect to your Postgres database&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Postico's strenghts are also its weaknesses: it doesn't offer advanced administration, monitoring or querying capabilities&lt;/li&gt;
&lt;li&gt;  Postico is only available on macOS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Postico pricing:&lt;/strong&gt; $39.99 for 1 user, $319.99 for 10 users, free trial with feature limitations but no time limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. DataGrip
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Aros8LSa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.jetbrains.com/datagrip/img/screenshots/query-console.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Aros8LSa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.jetbrains.com/datagrip/img/screenshots/query-console.png" alt="DataGrip PostgreSQL client" width="880" height="621"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.jetbrains.com/datagrip/"&gt;DataGrip&lt;/a&gt; is a multi database IDE to install locally, that can act as your Postgres GUI and much more. It is developed by JetBrains who are known for their numerous dev tools. On top of Postgres, it supports MySQL, Oracle Database, Redshift, MariaDB, Cassandra, &lt;a href="https://blog.forestadmin.com/mongodb-cheat-sheet/"&gt;MongoDB&lt;/a&gt; and more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DataGrip supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Powerful data viewer and editor&lt;/li&gt;
&lt;li&gt;  Great and customisable UI&lt;/li&gt;
&lt;li&gt;  A lot of powerful features to develop on your PostgreSQL database, such as context and schema based code completion, and real-time bug detection in your code (and fix suggestions!).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  DataGrip can be resource intensive&lt;/li&gt;
&lt;li&gt;  Because it's much more than a Postgres client, DataGrip can be a bit overwhelming for beginners&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;DataGrip pricing:&lt;/strong&gt; $89 per year for individual users, $199 per user per year for organisations, with commitment and product packs options.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Navicat
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YRQiL7Kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.navicat.com/images/product_screenshot/02.Product_01_Premium_Windows_01_Mainscreen_FR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YRQiL7Kz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.navicat.com/images/product_screenshot/02.Product_01_Premium_Windows_01_Mainscreen_FR.png" alt="Navicat PostgreSQL GUI" width="880" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.navicat.com/en/products/navicat-for-postgresql"&gt;Navicat&lt;/a&gt; is a GUI focused on database development. As it is multi database, on top of acting as your PostgreSQL GUI, it can connect MySQL, MariaDB, MongoDB, SQL Server, Oracle, PostgreSQL, and SQLite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Navicat supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;li&gt;  iOS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Easy and powerful SQL development tools, such as a visual SQL builder, code completion and customisable Code Snippets.&lt;/li&gt;
&lt;li&gt;  Good database structure visualisation and edition capabilities.&lt;/li&gt;
&lt;li&gt;  Collaboration feature&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Limited PostgreSQL database administration capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Navicat pricing:&lt;/strong&gt; $349.99 per year for non commercial usage, $699.99 per year for commercial usage, with different commitment options&lt;/p&gt;

&lt;h2&gt;
  
  
  6. TablePlus
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lk5exCm2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lk5exCm2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-7.png" alt="TablePlus Postgres GUI" width="880" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tableplus.com/"&gt;TablePlus&lt;/a&gt; is a database management GUI supporting various databases including MySQL, Redshift, Redis, MongoDB and of course PostgreSQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TablePlus supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;li&gt;  iOS&lt;/li&gt;
&lt;li&gt;  iPadOS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Clean and intuitive data browsing, querying and editing UI&lt;/li&gt;
&lt;li&gt;  Various and easy to use security features&lt;/li&gt;
&lt;li&gt;  Good query editor including autocomplete, highlight syntax, query reformatter and history.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  TablePlus doesn't go deep in any specific area (for instance PostgreSQL development or monitoring). But is it really a con?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;TablePlus pricing:&lt;/strong&gt; from $49 to $99&lt;/p&gt;

&lt;h2&gt;
  
  
  7. OmniDB
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EyQW-M2---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/OmniDB/doc/master/img/omnidb_3/dashboard.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EyQW-M2---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/OmniDB/doc/master/img/omnidb_3/dashboard.png" alt="OmniDB PostgreSQL GUI" width="880" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://omnidb.readthedocs.io/en/latest/en/01_introduction.html"&gt;OmniDB&lt;/a&gt; is a browser-based app to access and manage various databases such as Oracle and MySQL. And of course, it can act as your PostgreSQL client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OmniDB supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  macOS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  OmniDB supports plugins, so developers can add functionalities to their PostgreSQL GUI&lt;/li&gt;
&lt;li&gt;  It can be accessed by multiple users from several computers, making it a good option to collaborate on your PostgreSQL databases&lt;/li&gt;
&lt;li&gt;  OmniDB offers intuitive data editing features such as ability to copy and paste blocks&lt;/li&gt;
&lt;li&gt;  Good SQL editing with a customisable SQL editor featuring syntax highlight and code completion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://omnidb.readthedocs.io/en/latest/index.html"&gt;Light documentation&lt;/a&gt; especially on the usage of the tool&lt;/li&gt;
&lt;li&gt;  OmniDB is more complex than a Postico or TablePlus but less advanced than a DataGrip or Navicat. It's a good free option but maybe less complete than DBeaver, which has a &lt;a href="https://github.com/dbeaver/dbeaver/wiki"&gt;better documentation&lt;/a&gt; and a seemingly larger community.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;OmniDB pricing:&lt;/strong&gt; free and open source&lt;/p&gt;

&lt;h2&gt;
  
  
  8. SQuirreL SQL
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--V2P9k_3s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--V2P9k_3s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-8.png" alt="SquirreL Postgres GUI" width="880" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://squirrel-sql.sourceforge.io/"&gt;SquirreL SQL&lt;/a&gt; is a Java tool to view the structure of databases, browse their data, issue SQL commands and more. It supports many databases including SQL Server, MySQL, Oracle Database and of course PostgreSQL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Squirrel SQL Supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Linux&lt;/li&gt;
&lt;li&gt;  Mac OS&lt;/li&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  SquirreL SQL supports Java plugins to extend its capabilities&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Configuration is hard for first time users&lt;/li&gt;
&lt;li&gt;  The interface isn't the most intuitive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SquirreL SQL pricing:&lt;/strong&gt; free and open source&lt;/p&gt;

&lt;h2&gt;
  
  
  9. HeidiSQL
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0U5N71NE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.heidisql.com/images/screenshots/database.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0U5N71NE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://www.heidisql.com/images/screenshots/database.png" alt="HeidiSQL Postgres GUI" title="Details about tables and views. Switchable column headers. Used to rename, delete, empty and modify tables." width="880" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.heidisql.com/"&gt;HeidiSQL&lt;/a&gt; is a client supporting various databases including MariaDB, MySQL and PostgreSQL. It's been built with the goal of being easy to learn.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HeidiSQL supported platforms&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  HeidiSQL is particularly good at managing several databases/servers simultaneously. Not only it can connect to multiple servers, but allows direct exports from one server or database to another and search across all the connected databases from the same server.&lt;/li&gt;
&lt;li&gt;  HeidiSQL is easy to install as a Windows app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Limited to Windows&lt;/li&gt;
&lt;li&gt;  Users have reported that the tool can be quite buggy&lt;/li&gt;
&lt;li&gt;  HeidiSQL doesn't provide advanced code debugging features&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;HeidiSQL pricing:&lt;/strong&gt; free and open source&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Shameless plug: Forest Admin
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://camo.githubusercontent.com/9d153914272d07052d905ce6e3445bbcc2916b64e2e7efa21b0f0e382a50b8ba/68747470733a2f2f666f726573742d6173736574732e73332e616d617a6f6e6177732e636f6d2f4769746875622b524541444d452b6173736574732f637275642e6a706567" class="article-body-image-wrapper"&gt;&lt;img src="https://camo.githubusercontent.com/9d153914272d07052d905ce6e3445bbcc2916b64e2e7efa21b0f0e382a50b8ba/68747470733a2f2f666f726573742d6173736574732e73332e616d617a6f6e6177732e636f6d2f4769746875622b524541444d452b6173736574732f637275642e6a706567" alt="Forest Admin PostgreSQL GUI" width="2880" height="1800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Forest Admin is an admin panel builder that can easily act as your Postgres GUI. It's packaged as a web application, with backend component to install on your servers. Upon installation, Forest Admin introspects your database and automatically creates a GUI including &lt;a href="https://blog.forestadmin.com/build-a-crud-app-for-your-database/"&gt;CRUD&lt;/a&gt; operations and tables visualisation, as well as functionalities like search, filters, pagination, exports and more. You can then customise it, add your custom actions or data visualisations.&lt;/p&gt;

&lt;p&gt;Forest Admin is focused on easing the visualisation and manipulation of your PostgreSQL database data, even by non technical users, from anywhere with an internet connection.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forest Admin pricing:&lt;/strong&gt; free for 1 user, then $24 to $48 per user per month, commitment options.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Need to build admin panels or a GUI tool for PostgreSQL?&lt;/em&gt; &lt;em&gt;&lt;a href="https://www.forestadmin.com/integrations/postgresql?utm_source=blog&amp;amp;utm_medium=blog-organic&amp;amp;utm_campaign=blog-organic&amp;amp;utm_content=blog-postgres-gui"&gt;Check out Forest Admin for PostgreSQL&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>postgres</category>
      <category>database</category>
      <category>tooling</category>
    </item>
    <item>
      <title>What is a CRUD app and how to build one?</title>
      <dc:creator>Matthieu Blandineau</dc:creator>
      <pubDate>Thu, 12 May 2022 12:11:04 +0000</pubDate>
      <link>https://dev.to/forestadmin/what-is-a-crud-app-and-how-to-build-one-2016</link>
      <guid>https://dev.to/forestadmin/what-is-a-crud-app-and-how-to-build-one-2016</guid>
      <description>&lt;p&gt;Virtually any application involves users – or other applications it connects with – interacting with data stored in a database. Those interactions can be summarised in four operations: create, read (or view), update and delete. Those are the CRUD operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  CRUD operations explained
&lt;/h2&gt;

&lt;p&gt;More concretely, what are CRUD operations? Let’s use our &lt;a href="https://community.forestadmin.com/"&gt;community forum&lt;/a&gt; as an example.&lt;/p&gt;

&lt;h3&gt;
  
  
  CRUD operations descriptions and examples
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;CREATE&lt;/strong&gt; – Being a forum, it needs to let our users create new topics. When a user opens the topic creation form, fills it and clicks on the "Create topic" button, it will trigger the forum's CREATE function that will create a new "Topic" record with the "title", "content", "tags", etc values in the forum's database&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GV4f9Ipy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.10.41.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GV4f9Ipy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.10.41.png" alt="CRUD CREATE" width="880" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;READ&lt;/strong&gt; – Once the post is created, anyone will be able to read it when browsing on the forum and clicking on it, or directly accessing its URL. Doing so will call the forum's READ function, that will retrieve the topic including its attributes (title, content, tags, etc) from the database. The READ function doesn't modify any information from this topic.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Kf9RY8-j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.13.42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Kf9RY8-j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.13.42.png" alt="CRUD READ" width="880" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt; – After a user has created a topic, our forum allows them to edit it. Useful if they made a mistake or forgot something. To do so, users can simply click the edit button and modify the values of the different attributes. After they click "Save Edit", the forum's UPDATE function will be called, and change those values accordingly in the database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7RQaJ1LW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.12.30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7RQaJ1LW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.12.30.png" alt="CRUD UPDATE" width="880" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KRubYN4C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.13.05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KRubYN4C--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.13.05.png" alt="CRUD UPDATE form" width="880" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DELETE&lt;/strong&gt; – If for any reason, the user wants to delete their topic, they can click the "delete topic" button,. The forum's DELETE function will be called, and will delete the topic record and its attributes from the database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rBZpIJE8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.15.14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rBZpIJE8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/Screenshot-2022-05-03-at-16.15.14.png" alt="CRUD DELETE" width="880" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a simple explanation of CRUD operations on a single type of records. Even basic applications will involve CRUD operations on various types of records, with different users being authorised to perform different operations on different types of records. In our forums examples, a user can CREATE a topic, UPDATE their account, READ comments in a topic, and DELETE a bookmark, while admins can UPDATE users rights or CREATE new forum sections.&lt;/p&gt;

&lt;h3&gt;
  
  
  CRUD operations, REST and SQL
&lt;/h3&gt;

&lt;p&gt;Now we know what are CRUD operations at a high level. We saw that essentially, CRUD operations are triggered by users' (or automated) actions, and alter or read the database. Usually, in web applications, those CRUD operations will be triggered by users' actions generating calls to a REST API, and will alter or read the database via SQL queries.&lt;/p&gt;

&lt;p&gt;The table below describes how CRUD operations map to HTTP methods from REST APIs called to trigger the operations, and to SQL queries performed to alter or read the database:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RFXRTSm---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k91paf0q4nl6w72pe44u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RFXRTSm---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k91paf0q4nl6w72pe44u.png" alt="CRUD Table" width="880" height="346"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a CRUD app?
&lt;/h2&gt;

&lt;p&gt;A you might have noticed, even for the most basic use case, those CRUD operations aren't enough to achieve any meaningful results by themselves, they interact with other elements. All together, those elements make a CRUD app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Front-end
&lt;/h3&gt;

&lt;p&gt;The front-end, or User Interface, is what enable users to interact with the application, call the REST API to trigger the CRUD operations and ultimately interact with the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Back-end
&lt;/h3&gt;

&lt;p&gt;The back-end is what will translate the REST API calls into SQL queries to perform CRUD operations on your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Database
&lt;/h3&gt;

&lt;p&gt;The database is where your data, and where the CRUD operations are ultimately performed via SQL queries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Role-Based Access Control Activity logs, ...
&lt;/h3&gt;

&lt;p&gt;In addition to the components listed above, that are the essential components of a CRUD app, additional capabilities are required to build a robust app. Indeed, you might want to restrict which users can perform which operations (for instance deleting the entire database), and log every operations performed for debugging or compliance purposes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Hosting
&lt;/h3&gt;

&lt;p&gt;All the components above have to be hosted somewhere to always be accessible for your and your users.&lt;/p&gt;

&lt;p&gt;Now, let's see different options to build a CRUD app.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a CRUD app from scratch
&lt;/h2&gt;

&lt;p&gt;An obvious option to build a CRUD app is to build it from scratch. Most likely, if you're thinking about building such an app, it's because you already have a database storing data you want to enable your users to easily visualise or manipulate. So we will assume you already have an up and running database.&lt;/p&gt;

&lt;p&gt;While CRUD apps seem fairly basic, developing one requires solid front-end, back-end and database knowledge. In this blog, we won't cover everything in detail but list the main steps to build a CRUD app on top of your database, from scratch, and link to useful resources.&lt;/p&gt;

&lt;p&gt;For the sake of the exercise, we'll assume you're using the following popular technologies: &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; for the front-end, &lt;a href="https://nodejs.org/en/"&gt;Node.js&lt;/a&gt; for the back-end and &lt;a href="https://www.postgresql.org/"&gt;PostreSQL&lt;/a&gt; for your database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Build your CRUD app front-end
&lt;/h3&gt;

&lt;p&gt;We used this great tutorial "&lt;a href="https://www.freecodecamp.org/news/how-to-perform-crud-operations-using-react/"&gt;How to Perform CRUD Operations using React, React Hooks, and Axios&lt;/a&gt;" as a reference.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Architecture &amp;amp; design: Let's go. As we're starting from an existing database, you already know what data is stored in this database, and how it is structured. So the first you might do is to think about how you want your users to interact with this data, how you want to represent it, and what will the experience look like.&lt;/li&gt;
&lt;li&gt;  Create your React application&lt;/li&gt;
&lt;li&gt;  Install the Semantic UI Package for React
This package is an UI library providing pre-built components such as buttons, tables and much more.&lt;/li&gt;
&lt;li&gt;  Create your app first screen&lt;/li&gt;
&lt;li&gt;  Create your CREATE, READ and UPDATE files for your CREATE, READ and UPDATE component, no need for a new component for DELETE&lt;/li&gt;
&lt;li&gt;  Build the CREATE, READ, UPDATE and DELETE elements, buttons and logic&lt;/li&gt;
&lt;li&gt;  Build the CRUD requests to the API (once you've built the API)&lt;/li&gt;
&lt;li&gt;  Implement forms validation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Build your CRUD app back-end
&lt;/h3&gt;

&lt;p&gt;Once you're done with the front-end, it's time to build what will be the link between the front-end and the database. We used this "&lt;a href="https://glaucia86.medium.com/developing-a-crud-node-js-application-with-postgresql-d25febb1cc4"&gt;Developing a CRUD Node.js Application with PostgreSQL&lt;/a&gt;" guide as a reference.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Create your app architecture in Node.js&lt;/li&gt;
&lt;li&gt;  Configure your app and its connection to your PostgreSQL database&lt;/li&gt;
&lt;li&gt;  Create the routes for your CRUD operations, including writing the API endpoints for their respective methods, and their respective logic to query the database&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Deploy your CRUD app
&lt;/h3&gt;

&lt;p&gt;As we mentioned previously, you need to host your database, back-end and front-end online if you want you and your users to be able to access it anytime from anywhere.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bonus points: add Role-Based Access Control
&lt;/h3&gt;

&lt;p&gt;From installing the necessary packages to setting up user authentification (both signup and login) and their front-end manifestations to configuring the rights on the routes, implementing RBAC on your CRUD app adds significant amount of development time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Useful tools to reduce CRUD app development time
&lt;/h3&gt;

&lt;p&gt;As we've seen, developing a basic CRUD app from scratch can take significant time. Fortunately, there are tools to accelerate this process, especially on the backend part. Tools like &lt;a href="https://hasura.io/"&gt;Hasura&lt;/a&gt; or &lt;a href="https://postgrest.org/en/stable/"&gt;PostgreSQL&lt;/a&gt;, depending on your stack, will automatically create APIs based on your database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building a CRUD app with a CRUD app builder
&lt;/h2&gt;

&lt;p&gt;Even with tools like Hasura or PostgreSQL, building a CRUD still takes time. Even more so if you need specific capabilities in addition to CRUD operations. To prevent you from reinventing the wheel every-time you need to enable your users to manipulate and visualise the data stored in your database, tools exist to build CRUD apps in minute and allow you to focus on adding advanced logic and functionalities to your applications. Examples include &lt;a href="https://blog.forestadmin.com/forest-admin-vs-django-admin/"&gt;&lt;/a&gt;&lt;a href="https://docs.djangoproject.com/en/4.0/ref/contrib/admin/"&gt;Django Admin&lt;/a&gt; or &lt;a href="https://blog.forestadmin.com/forest-admin-vs-laravel-nova/"&gt;&lt;/a&gt;&lt;a href="https://nova.laravel.com/"&gt;Laravel Nova&lt;/a&gt; depending on your stack.&lt;/p&gt;

&lt;p&gt;In this blog, we'll see how to build a CRUD app with &lt;a href="https://www.forestadmin.com/"&gt;Forest Admin&lt;/a&gt;. We'll assume you're building a CRUD app for a &lt;a href="https://blog.forestadmin.com/postgresql-cheat-sheet/"&gt;PostgreSQL&lt;/a&gt; database.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install your CRUD app builder
&lt;/h3&gt;

&lt;p&gt;The first step is to install the tool that will help your generate your CRUD app. Using our example Forest Admin with a PostgreSQL database, it only takes a few steps:&lt;/p&gt;

&lt;p&gt;Install Forest Admin CLI&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm install -g lumber-cli@latest -s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Login to Forest CLI&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ forest login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Generate the backend application&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ forest projects:create "CRUDapp" --databaseConnectionURL "postgres://root:password@localhost:5432/myDatabase" --databaseSchema "public" --applicationHost "localhost" --applicationPort "3310"  
$ cd "CRUDapp" 
$ npm install -s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Run your backend application&lt;/p&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ npm start&lt;br&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h3&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Build your CRUD app&lt;br&gt;
&lt;/h3&gt;

&lt;p&gt;The catch is that with Forest Admin, you get an up and running CRUD app right after installing it on top of your database. It automatically generates visualisations of your tables, CRUD operations and more, as well as the associated front-end.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--55B2sxFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--55B2sxFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://s3-eu-west-1.amazonaws.com/blog.forestadmin.com/2022/05/image-1.png" alt="CRUD app" width="880" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You also benefit from built-in Role-Based Access Control, Activity logs and more so you can focus on coding your own business logic, adding custom actions to your new app and customising it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.forestadmin.com/"&gt;Click here&lt;/a&gt; to learn more about Forest Admin, &lt;a href="https://docs.forestadmin.com/documentation/"&gt;read the doc&lt;/a&gt; or &lt;a href="https://app.forestadmin.com/signup"&gt;get started now&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>programming</category>
      <category>database</category>
    </item>
    <item>
      <title>PostgreSQL Cheat Sheet</title>
      <dc:creator>Matthieu Blandineau</dc:creator>
      <pubDate>Wed, 11 May 2022 08:41:13 +0000</pubDate>
      <link>https://dev.to/forestadmin/postgresql-cheat-sheet-38j3</link>
      <guid>https://dev.to/forestadmin/postgresql-cheat-sheet-38j3</guid>
      <description>&lt;p&gt;We gathered a list of handy PostgreSQL commands and queries when working with PostgreSQL databases. Please ping us &lt;a href="https://twitter.com/ForestAdmin"&gt;@ForestAdmin&lt;/a&gt; if you’d like to add something to the cheat sheet!&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting started with PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Login and enter PostgreSQL command line utility psql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo su - postgres psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List postgres databases&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect to postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\c databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exit postgreSQL command line utility psql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\q
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Managing PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Check PostgreSQL version&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT version();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if PostgreSQL is installed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ which psql
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check if PostgreSQL is running&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pgrep -fa -- -D | grep postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart PostgreSQL on Linux&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# systemctl restart postgresql
// or
# service postgresql restart
// or
# /etc/init.d/postgresql restart
// or
# /sbin/service postgresql restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart PostgreSQL on OSX&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# brew services restart postgres
// or
# pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restart PostgreSQL on Windows&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Winkey + R
Type "services.msc"
Click "restart"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change PostgreSQL user password&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo -u postgres psql
\password postgres
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exit from psql&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\q
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Interacting with databases in PostgreSQL
&lt;/h2&gt;

&lt;p&gt;List postgres databases&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Connect or switch to postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\c databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create new postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE DATABASE databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DROP DATABASE databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Rename postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER DATABASE old_databaseName TO new_databaseName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Query postgres JSON data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT *
FROM mytable
WHERE myfield @&amp;gt; '{"key1":"valueA"}'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Interacting with tables in PostgreSQL
&lt;/h2&gt;

&lt;p&gt;List postgres tables&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\dt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Describe postgres table&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;\d tableName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create postgres table&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE TABLE tableName( 
    columnName columnType,
    columnName columnType
);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete postgres table&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DROP TABLE tableName CASCADE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Backup and restore PostgreSQL database
&lt;/h2&gt;

&lt;p&gt;Backup postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pg_dump -d databaseName -U userName &amp;gt; backupFile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Restore postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;psql databaseName &amp;lt; backupFile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Managing roles and permissions in PostgreSQL
&lt;/h2&gt;

&lt;p&gt;List postgres roles&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT rolname FROM pg_roles;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create postgres user&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE USER userName WITH PASSWORD 'userPassword';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Delete postgres user&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DROP USER userName;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change postgres user password&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ALTER ROLE userName WITH PASSWORD 'userPassword';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List all assigned roles postgres&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT
    r.rolname,
    r.rolsuper,
    r.rolinherit,
    r.rolcreaterole,
    r.rolcreatedb,
    r.rolcanlogin,
    r.rolconnlimit,
    r.rolvaliduntil,
    ARRAY(SELECT b.rolname
        FROM pg_catalog.pg_auth_members m
        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE m.member = r.oid) as memberof,
    r.rolreplication
FROM pg_catalog.pg_roles r
ORDER BY 1;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grant all permissions on postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON DATABASE databaseName TO userName;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Grant connection permissions on postgres database&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GRANT CONNECT ON DATABASE databaseName TO userName;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;List permissions for specific role postgres&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT table_catalog, table_schema, table_name, privilege_type
FROM   information_schema.table_privileges
WHERE  grantee = userName ORDER BY table_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  ProstgreSQL psql commands recap
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;\?&lt;/code&gt; List all available psql commands&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\h COMMAND&lt;/code&gt; Get help on specific command&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\l&lt;/code&gt; List databases&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\c&lt;/code&gt; databaseName Connect to database&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\dt&lt;/code&gt; List tables&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\d&lt;/code&gt; tableName Describe table&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\d+&lt;/code&gt; tableName Describe table with details&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\dn&lt;/code&gt; List schemas&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\df&lt;/code&gt; List functions&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\dv&lt;/code&gt; List views&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\du&lt;/code&gt; List users&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\dy&lt;/code&gt; List events&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\di&lt;/code&gt; List indexes&lt;/p&gt;

&lt;p&gt;&lt;code&gt;\q&lt;/code&gt; Exit&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Need to build admin panels or a GUI tool for PostgreSQL? Check out &lt;a href="https://www.forestadmin.com/integrations/postgresql?utm_source=referral&amp;amp;utm_medium=devto&amp;amp;utm_campaign=cheat-sheet-postgresql&amp;amp;utm_content=cheat-sheet-postgresql"&gt;Forest Admin for PostgreSQ&lt;/a&gt;L&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
