<?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: Muhammad Farooq</title>
    <description>The latest articles on DEV Community by Muhammad Farooq (@farooquememon385).</description>
    <link>https://dev.to/farooquememon385</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%2Fuser%2Fprofile_image%2F1037953%2F85fd8815-ef9a-48b7-8a9d-c9729c8f2a04.jpeg</url>
      <title>DEV Community: Muhammad Farooq</title>
      <link>https://dev.to/farooquememon385</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/farooquememon385"/>
    <language>en</language>
    <item>
      <title>How Apache AGE Works on Top of PostgreSQL</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Sun, 27 Aug 2023 11:37:46 +0000</pubDate>
      <link>https://dev.to/farooquememon385/how-apache-age-works-on-top-of-postgresql-18ml</link>
      <guid>https://dev.to/farooquememon385/how-apache-age-works-on-top-of-postgresql-18ml</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Apache AGE is a PostgreSQL extension that provides graph database functionality. The goal of Apache AGE is to enable Postgres users to gain access to graph query modeling in Postgres, existing relational model. In this blogpost, I will explain how Apache AGE works on top of PostgreSQL and what benefits it brings to the users.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is a Graph Database?
&lt;/h2&gt;

&lt;p&gt;A graph database is a type of database that stores data as nodes and edges, where nodes represent entities and edges represent relationships between them. A graph database allows users to query and analyze complex connected data using graph algorithms and traversal patterns. Graph databases are useful for applications that deal with social networks, recommendation systems, fraud detection, knowledge graphs, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Use Apache AGE?
&lt;/h2&gt;

&lt;p&gt;Apache AGE is an extension for PostgreSQL that allows users to use graph data models within the database. It is built on top of the Apache Arrow format, which provides a high-performance, in-memory data structure for data processing. Apache AGE supports openCypher, one of the most popular graph query languages today, as well as SQL, the standard relational query language. Users can perform hybrid queries that combine both graph and relational data in a single query.&lt;/p&gt;

&lt;p&gt;Some of the benefits of using Apache AGE are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Users can leverage the power and features of PostgreSQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can use existing relational data without going through migration or transformation. They can simply create graph views on top of the tables and query them as graphs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can benefit from the performance and scalability of Apache Arrow, which enables fast data transfer and computation between different systems and languages.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users can enjoy the flexibility and expressiveness of openCypher, which supports various graph operations such as pattern matching, aggregation, projection, filtering, ordering, and more.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Does Apache AGE Work?
&lt;/h2&gt;

&lt;p&gt;Apache AGE works as a plugin for PostgreSQL that extends its functionality with graph features. It consists of three main components: the parser, the executor, and the storage engine.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The parser:&lt;br&gt;
It is responsible for parsing the user's queries and converting them into an internal representation that can be executed by the executor.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The executor:&lt;br&gt;
It is responsible for executing the queries and performing the graph operations. It uses Apache Arrow to store and manipulate the data in memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The storage engine:&lt;br&gt;
It is responsible for storing and retrieving the data from the underlying PostgreSQL tables. It uses a custom data type called agtype to store the graph data as JSONB objects.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The following diagram illustrates how Apache AGE works on top of PostgreSQL:&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%2F7soygfr66ncl8hvezmoi.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%2F7soygfr66ncl8hvezmoi.png" alt="Image showing how apache work on top of postgresql"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to install Apache AGE Extension?
&lt;/h2&gt;

&lt;p&gt;To use Apache AGE, users need to install it as an extension for PostgreSQL. They can download the source code or binary packages from &lt;a href="https://age.apache.org" rel="noopener noreferrer"&gt;the official website&lt;/a&gt; or &lt;a href="https://github.com/apache/age" rel="noopener noreferrer"&gt;the GitHub repository&lt;/a&gt;. &lt;/p&gt;

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

&lt;p&gt;Apache AGE is a PostgreSQL extension that provides graph database functionality. It allows users to use graph data models within the existing relational database. It supports openCypher and SQL. &lt;br&gt;
It works as a plugin for PostgreSQL that extends its functionality with graph features. It consists of three main components: the parser, the executor, and the storage engine.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>postgressql</category>
      <category>apacheage</category>
      <category>database</category>
    </item>
    <item>
      <title>Popular Graph extensions to PostgreSQL</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Sat, 26 Aug 2023 05:28:03 +0000</pubDate>
      <link>https://dev.to/farooquememon385/popular-graph-extensions-to-postgresql-49kd</link>
      <guid>https://dev.to/farooquememon385/popular-graph-extensions-to-postgresql-49kd</guid>
      <description>&lt;h2&gt;
  
  
  PostgreSQL
&lt;/h2&gt;

&lt;p&gt;PostgreSQL is a powerful and versatile open source database system that can handle a wide range of applications and data types.&lt;/p&gt;

&lt;p&gt;But did you know that you can also use graph data models within PostgreSQL with extensions? Graph data models are useful for representing and analyzing complex and interconnected data, such as social networks, recommendation systems, fraud detection, knowledge graphs, and more. &lt;/p&gt;

&lt;p&gt;In this blogpost, I will introduce some of the most popular graph extensions to PostgreSQL and how they can enhance your database experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache AGE
&lt;/h2&gt;

&lt;p&gt;Apache AGE is an extension that provides graph database functionality to PostgreSQL. AGE stands for A Graph Extension, and is inspired by Bitnine's fork of PostgreSQL 10, AgensGraph, which is a multi-model database. &lt;/p&gt;

&lt;p&gt;Apache AGE allows you to store, query, and manipulate graph data in nodes and edges using hybrid queries that combine SQL and OpenCypher to access both relational and graph data simultaneously.&lt;/p&gt;

&lt;p&gt;Apache AGE also comes with a web user interface tool called &lt;strong&gt;Apache AGE Viewer&lt;/strong&gt;, which allows you to visualize and explore graph data in an intuitive and convenient way. &lt;/p&gt;

&lt;p&gt;Apache AGE is an open source project and can be installed from the &lt;a href="https://age.apache.org/download"&gt;Official Website Download Page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you are interested, you can visit their &lt;a href="https://age.apache.org/"&gt;Official Website&lt;/a&gt; and &lt;a href="https://github.com/apache/age"&gt;Github Repo&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  pgRouting
&lt;/h2&gt;

&lt;p&gt;pgRouting is an extension that provides geospatial routing functionality to PostgreSQL. pgRouting allows you to perform various types of network analysis on spatial data, such as finding the shortest path, the traveling salesman problem, the vehicle routing problem, the location-allocation problem, and more. pgRouting uses the PostGIS extension, which adds support for geographic objects to PostgreSQL, as a base. &lt;br&gt;
pgRouting is an open source project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graphile
&lt;/h2&gt;

&lt;p&gt;Graphile is a suite of tools that help you build high-performance GraphQL APIs on top of PostgreSQL. GraphQL is a query language for APIs that allows you to specify the exact data you need from the server in a declarative way. Graphile allows you to automatically generate a GraphQL schema from your PostgreSQL schema, or to customize it with plugins or code. Graphile also provides features such as live queries, subscriptions, authentication, authorization, validation, caching, batching, and more. &lt;/p&gt;

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

&lt;p&gt;Graph extensions can greatly enhance your database functionality and performance by providing features that are not included in the core PostgreSQL or by offering more options and flexibility than the built-in ones. Graph extensions are one of the reasons why PostgreSQL is such a powerful and versatile database system.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>postgressql</category>
      <category>apacheage</category>
      <category>graphql</category>
    </item>
    <item>
      <title>Integration of Apache AGE and Citus to Build a Scalable Graph Database on PostgreSQL</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Wed, 23 Aug 2023 17:27:42 +0000</pubDate>
      <link>https://dev.to/farooquememon385/integration-of-apache-age-and-citus-to-build-a-scalable-graph-database-on-postgresql-3849</link>
      <guid>https://dev.to/farooquememon385/integration-of-apache-age-and-citus-to-build-a-scalable-graph-database-on-postgresql-3849</guid>
      <description>&lt;h2&gt;
  
  
  Graph Database
&lt;/h2&gt;

&lt;p&gt;Graph databases are becoming increasingly popular for applications that need to store and analyze complex and interconnected data, such as social networks, recommendation systems, or knowledge graphs. Graph databases allow you to model your data as nodes and edges, and query them using graph algorithms and languages.&lt;/p&gt;

&lt;p&gt;However, most graph databases are separate from relational databases, which means that you need to maintain two different systems, migrate your data, and integrate your queries. Moreover, most graph databases are not designed to scale horizontally, which limits their performance and capacity.&lt;/p&gt;

&lt;p&gt;What if you could use PostgreSQL as a graph database, and also scale it out across multiple nodes? This is where Apache AGE and Citus come in.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Apache AGE?
&lt;/h2&gt;

&lt;p&gt;Apache AGE is a graph database extension for PostgreSQL that allows you to store, query, and analyze graph data in a relational database. Graph data is composed of nodes and edges that represent entities and relationships. With Apache AGE, you can use openCypher, a popular graph query language, to manipulate and explore graph data in PostgreSQL. You can also use SQL to query both graph and relational data in a hybrid way.&lt;/p&gt;

&lt;p&gt;Some of the benefits of using Apache AGE are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can leverage the power and reliability of PostgreSQL as a relational database system, while also gaining access to graph functionality.&lt;/li&gt;
&lt;li&gt;You can use existing PostgreSQL tools and libraries to work with graph data, without needing to migrate or integrate with a separate graph database.&lt;/li&gt;
&lt;li&gt;You can perform fast and efficient graph analysis using various algorithms and functions provided by Apache AGE.&lt;/li&gt;
&lt;li&gt;You can visualize and interact with graph data using Apache AGE Viewer, a web user interface for Apache AGE.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to learn more about Apache AGE, you can visit its &lt;a href="https://age.apache.org"&gt;official website&lt;/a&gt; and its &lt;a href="https://github.com/apache/age"&gt;GitHub repository&lt;/a&gt;. &lt;/p&gt;

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

&lt;p&gt;Citus is a PostgreSQL extension that transforms Postgres into a distributed database—so you can achieve high performance at any scale. With Citus, you extend your PostgreSQL database with new superpowers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Distributed tables are sharded across a cluster of PostgreSQL nodes to combine their CPU, memory, storage and I/O capacity.&lt;/li&gt;
&lt;li&gt;References tables are replicated to all nodes for joins and foreign keys from distributed tables and maximum read performance.&lt;/li&gt;
&lt;li&gt;Distributed query engine routes and parallelizes SELECT, DML, and other operations on distributed tables across the cluster.&lt;/li&gt;
&lt;li&gt;Columnar storage compresses data, speeds up scans, and supports fast projections, both on regular and distributed tables.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Advantages of using Apache AGE and Citus Together?
&lt;/h2&gt;

&lt;p&gt;By combining Apache AGE and Citus, you can build a scalable graph database on PostgreSQL that can handle large volumes of complex and interconnected data. You can shard your graph data across multiple nodes using Citus, and query it using openCypher or SQL using Apache AGE. You can also join your graph data with your relational data using foreign keys or SQL joins.&lt;/p&gt;

&lt;p&gt;To use Apache AGE and Citus together, you need to install both extensions on your PostgreSQL cluster. &lt;/p&gt;

&lt;p&gt;But this may not work.&lt;/p&gt;

&lt;p&gt;Apache AGE team is working on a new project that is based on integration of Apache AGE and Citus.&lt;/p&gt;

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

&lt;p&gt;In this blog post, I introduced Apache AGE and Citus to build a scalable graph database on PostgreSQL. and how Apache AGE and Citus  can work together. &lt;/p&gt;

&lt;p&gt;We hope that this blog post was helpful and informative for you. If you have any questions or feedback, please feel free to leave a comment below. Thank you for reading!&lt;/p&gt;

</description>
      <category>citus</category>
      <category>apacheage</category>
      <category>postgres</category>
      <category>postgressql</category>
    </item>
    <item>
      <title>How to Control Autovacuum Frequency in PostgreSQL</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Wed, 23 Aug 2023 15:13:00 +0000</pubDate>
      <link>https://dev.to/farooquememon385/how-to-control-autovacuum-frequency-in-postgresql-4a65</link>
      <guid>https://dev.to/farooquememon385/how-to-control-autovacuum-frequency-in-postgresql-4a65</guid>
      <description>&lt;h2&gt;
  
  
  PostgreSQL
&lt;/h2&gt;

&lt;p&gt;PostgreSQL is a powerful and reliable database system that offers many features and benefits. However, it also has some challenges and drawbacks, such as the table bloat problem. Table bloat occurs when the space occupied by a table or an index is larger than the actual data size. This can affect the performance and efficiency of the database, as well as increase the backup and restore time.&lt;/p&gt;

&lt;p&gt;One of the main causes of table bloat is the accumulation of dead tuples. Dead tuples are rows that have been deleted or updated, but are still visible to concurrent transactions. PostgreSQL uses a mechanism called MVCC (Multi-Version Concurrency Control) to ensure transaction isolation and consistency. MVCC allows each transaction to see a snapshot of the database at a certain point in time, without locking the rows or tables. This means that old versions of rows are not immediately removed, but are marked as dead and invisible to new transactions.&lt;/p&gt;

&lt;p&gt;To reclaim the space occupied by dead tuples, PostgreSQL runs a process called vacuum. Vacuum removes dead tuples from the tables and indexes, and marks the space as free for reuse. Vacuum also updates the visibility map, which tracks which pages of a table contain only visible tuples. This helps to speed up index-only scans, which can avoid reading the table pages if the visibility map indicates that they are not needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Autovacuum
&lt;/h2&gt;

&lt;p&gt;PostgreSQL has an automatic vacuum daemon called autovacuum, which runs in the background and performs vacuum on tables that need it. Autovacuum is triggered by various factors, such as the number of dead tuples, the age of the transaction ID, and the size of the table. Autovacuum also performs analyze, which updates the statistics used by the query planner to choose the best execution plan.&lt;/p&gt;

&lt;p&gt;However, sometimes autovacuum may not run frequently enough for some tables, especially those with a large number of tuples and a high update or delete rate. This can lead to excessive table bloat and poor query performance. In this blog post, we will show you how to control the frequency of autovacuum for specific tables using storage parameters.&lt;/p&gt;

&lt;h2&gt;
  
  
  Storage Parameters
&lt;/h2&gt;

&lt;p&gt;Storage parameters are options that can be set for each table or index to control their physical storage characteristics. Some of these parameters affect how autovacuum behaves for a given relation. The two parameters that we will focus on are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;autovacuum_vacuum_threshold&lt;/strong&gt;: The minimum number of dead tuples in a table before autovacuum will issue a VACUUM command on it. The default value is 50.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;autovacuum_vacuum_scale_factor&lt;/strong&gt;: A fraction of the total number of tuples in a table that will be added to autovacuum_vacuum_threshold to determine whether autovacuum should issue a VACUUM command on it. The default value is 0.2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The formula for calculating when autovacuum will run on a table is:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;(the number of dead tuples)&lt;/code&gt; &amp;gt; &lt;code&gt;autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * (the number of tuples)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;For example, if a table has 100,000 tuples and 20,000 dead tuples, autovacuum will run on it when:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;20,000&lt;/code&gt; &amp;gt; &lt;code&gt;50 + 0.2 * 100,000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;which simplifies to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;20,000&lt;/code&gt; &amp;gt; &lt;code&gt;20,050&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;which is false, so autovacuum will not run on this table.&lt;/p&gt;

&lt;p&gt;However, if we change the storage parameters for this table to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;autovacuum_vacuum_threshold = 1000&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;autovacuum_vacuum_scale_factor = 0&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then autovacuum will run on it when:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;20,000&lt;/code&gt; &amp;gt; &lt;code&gt;1000 + 0 * 100,000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;which simplifies to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;20,000&lt;/code&gt; &amp;gt; &lt;code&gt;1000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;which is true, so autovacuum will run on this table.&lt;/p&gt;

&lt;p&gt;By adjusting these parameters, we can make autovacuum more aggressive or more conservative for specific tables, depending on our needs and preferences.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Let's see how this works in practice using an example. We will use the pgbench_accounts table from the pgbench benchmark tool. This table has 100,000 rows and is frequently updated by pgbench transactions.&lt;/p&gt;

&lt;p&gt;We can check the current storage parameters for this table using the \d+ command in psql:&lt;/p&gt;

&lt;p&gt;postgres=# &lt;code&gt;\d+ pgbench_accounts&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Table &lt;strong&gt;"public.pgbench_accounts"&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   Column   |     Type      | Collation | Nullable | Default | Storage | Stats target | Description 
------------+---------------+-----------+----------+---------+---------+--------------+-------------
 aid        | integer       |           | not null |         | plain   |              | 
 bid        | integer       |           |          |         | plain   |              | 
 abalance   | integer       |           |          |         | plain   |              | 
 filler     | character(84) |           |          |         | extended|              | 
Indexes:
    "pgbench_accounts_pkey" PRIMARY KEY, btree (aid)
    "pgbench_accounts_bid_index" btree (bid)
Options: autovacuum_vacuum_threshold=1000, autovacuum_vacuum_scale_factor=0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can see that the table has the storage parameters that we want to use for this example. If we want to change them, we can use the ALTER TABLE command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_threshold = 1000);
ALTER TABLE
postgres=# ALTER TABLE pgbench_accounts SET (autovacuum_vacuum_scale_factor = 0.0);
ALTER TABLE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's generate some dead tuples by updating some rows in the table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# update pgbench_accounts set abalance = 1 where aid &amp;lt; 1002;
UPDATE 1001
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can check the number of dead tuples and the last autovacuum time for this table using the pg_stat_all_tables view:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;postgres=# SELECT relname, n_dead_tup, last_autovacuum FROM pg_stat_all_tables WHERE relname = 'pgbench_accounts';
     relname      | n_dead_tup |        last_autovacuum        
------------------+------------+-------------------------------
 pgbench_accounts |       1001 | 2023-07-01 00:32:23.627931+09
(1 row)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can see that the table has 1001 dead tuples and the last autovacuum was at 00:32:23. If we wait for a few minutes, we can see that autovacuum runs again on this table:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
postgres=# SELECT relname, n_dead_tup, last_autovacuum FROM pg_stat_all_tables WHERE relname = 'pgbench_accounts';
     relname      | n_dead_tup |        last_autovacuum        
------------------+------------+-------------------------------
 pgbench_accounts |          0 | 2023-07-01 00:43:24.498598+09
(1 row)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can see that the number of dead tuples is now zero and the last autovacuum was at 00:43:24. This means that autovacuum ran on this table as soon as it reached our set threshold of 1000 dead tuples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache AGE:
&lt;/h2&gt;

&lt;p&gt;Apache AGE is a graph database extension for PostgreSQL that allows you to store, query, and analyze graph data in a relational database. Graph data is composed of nodes and edges that represent entities and relationships. Visit their &lt;a href="https://age.apache.org"&gt;Official Website&lt;/a&gt; and &lt;a href="https://github.com/apache/age"&gt;Github Repo&lt;/a&gt; to learn More.&lt;/p&gt;

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

&lt;p&gt;In this blog post, we learned how to control the frequency of autovacuum for specific tables using storage parameters. We saw how to adjust the autovacuum_vacuum_threshold and autovacuum_vacuum_scale_factor parameters to make autovacuum more aggressive or more conservative for a given table. We also saw an example of how this works in practice using the pgbench_accounts table from the pgbench benchmark tool.&lt;/p&gt;

&lt;p&gt;We hope that this blog post was helpful and informative for you. If you have any questions or feedback, please feel free to leave a comment below. Thank you for reading!&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>postgressql</category>
      <category>apacheage</category>
      <category>database</category>
    </item>
    <item>
      <title>Features of PEM on top of PgAdmin</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Tue, 15 Aug 2023 18:33:51 +0000</pubDate>
      <link>https://dev.to/farooquememon385/features-of-pem-on-top-of-pgadmin-360p</link>
      <guid>https://dev.to/farooquememon385/features-of-pem-on-top-of-pgadmin-360p</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;PEM stands for Postgres Enterprise Manager, which is a comprehensive management tool for PostgreSQL and EDB Postgres Advanced Server1. PEM is built upon pgAdmin, which is the most popular open source administration and development platform for PostgreSQL. &lt;/p&gt;

&lt;h2&gt;
  
  
  PEM Console
&lt;/h2&gt;

&lt;p&gt;PEM Console is a desktop application that provides a graphical user interface for PEM. It is built upon pgAdmin, which means that it inherits all the features of pgAdmin plus the additional features of PEM. PEM Console allows you to access and manage your PostgreSQL or EDB Postgres servers and databases from your local machine, without the need of a web browser or a network connection.&lt;/p&gt;

&lt;p&gt;PEM Console is compatible with Windows, Linux, and Mac OS X platforms, You need to register the PEM agent with the PEM server using the &lt;code&gt;pemworker utility&lt;/code&gt;. Once you have done that, you can launch PEM Console and log in with your username and password. You can then see your servers and databases in the browser panel, and start managing them as you wish.&lt;/p&gt;

&lt;h2&gt;
  
  
  PEM REST API
&lt;/h2&gt;

&lt;p&gt;PEM REST API is a web service that allows you to interact with PEM programmatically using HTTP requests and responses. It exposes various endpoints for performing operations such as retrieving information, creating and modifying objects, executing commands, running queries, generating reports, and accessing other tools. You can use PEM REST API to automate tasks, integrate with other applications, or create custom solutions for your PostgreSQL or EDB Postgres servers and databases.&lt;/p&gt;

&lt;p&gt;PEM REST API is based on the OpenAPI specification, You can use any programming language or tool that supports HTTP requests to communicate with PEM REST API. &lt;/p&gt;

&lt;p&gt;To use PEM REST API, you need to authenticate yourself with your username and password using the Basic Authentication scheme. You also need to specify the Content-Type header as application/json for all requests that have a body. You can then send HTTP requests to the endpoints of PEM REST API.&lt;/p&gt;

&lt;h2&gt;
  
  
  PEM CLI
&lt;/h2&gt;

&lt;p&gt;PEM CLI is a command-line interface that allows you to interact with PEM using commands and arguments. It is a wrapper around the PEM REST API, which means that it uses the same endpoints and parameters as the PEM REST API. PEM CLI allows you to perform tasks such as retrieving information, creating and modifying objects, executing commands, running queries, generating reports, and accessing other tools from your terminal or shell. You can use PEM CLI to automate tasks, integrate with other scripts or programs, or create custom solutions for your PostgreSQL or EDB Postgres servers and databases.&lt;/p&gt;

&lt;p&gt;PEM CLI is available for Windows, Linux, and Mac OS X platforms, &lt;strong&gt;you can launch PEM CLI from your terminal or shell by typing &lt;code&gt;pem&lt;/code&gt; followed by a command name and its arguments&lt;/strong&gt;. You can also use &lt;code&gt;pem --help&lt;/code&gt; or &lt;code&gt;pem &amp;lt;command&amp;gt; --help&lt;/code&gt; to see the usage and options of each command.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features Extended by PEM:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Monitoring the performance, health, and activity of your PostgreSQL or EDB Postgres servers and databases in real time. You can view metrics such as CPU, memory, disk, network, sessions, locks, transactions, queries, replication, backups, logs, and alerts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow You to create custom dashboards and charts to visualize the data that matters to you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setting up notifications and actions based on predefined or custom rules and thresholds. You can receive alerts via email, SMS, or SNMP when something goes wrong or needs your attention.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Help you to optimize the performance of your PostgreSQL or EDB Postgres servers and databases by providing recommendations and tools for tuning various parameters and settings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assist you to protect your data and ensure its availability by offering backup and recovery solutions for your PostgreSQL or EDB Postgres servers and databases. You can schedule full or incremental backups, restore data from backups or point-in-time recovery (PITR), verify backup integrity, encrypt backup files, compress backup size, and manage backup storage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow you to analyze the performance of your SQL queries and statements by providing tools for profiling and debugging. You can capture and view the execution plans of your queries and identify slow or problematic queries.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable you to manage your team members and their access to your PostgreSQL or EDB Postgres servers and databases by providing features for role-based security and auditing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apache AGE
&lt;/h2&gt;

&lt;p&gt;Please Visit &lt;a href="https://age.apache.org"&gt;Apache AGE&lt;/a&gt; which is A Graph Extension to very popular Database PostgreSQL, and &lt;a href="https://github.com/apache/age"&gt;visit AGE's Github repository&lt;/a&gt; if you want to contribute.&lt;/p&gt;

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

&lt;p&gt;In this post, I have shown you some of the extra features of PEM that make it stand out from other enterprise managers. These features are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PEM Console: A desktop application that provides a graphical user interface for PEM.&lt;/li&gt;
&lt;li&gt;PEM REST API: A web service that allows you to interact with PEM programmatically using HTTP requests and responses.&lt;/li&gt;
&lt;li&gt;PEM CLI: A command-line interface that allows you to interact with PEM using commands and arguments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These features allow you to access and manage your PostgreSQL or EDB Postgres servers and databases from different platforms and interfaces according to your preference and convenience. &lt;br&gt;
They also enable you to automate tasks, integrate with other applications, or create custom solutions for your PostgreSQL or EDB Postgres servers and databases.&lt;br&gt;
Some &lt;br&gt;
PEM also extends the functionality of pgAdmin by providing features such as monitoring, alerting, tuning, backup and recovery, SQL profiling, team management, and auditing&lt;/p&gt;

&lt;p&gt;I hope you have found this post informative and helpful. If you have any questions or feedback, please feel free to leave a comment below. Thank you for reading!&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>pem</category>
      <category>pgadmin</category>
      <category>apacheage</category>
    </item>
    <item>
      <title>Enterprise managers built on top of pgAdmin</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Tue, 15 Aug 2023 17:50:51 +0000</pubDate>
      <link>https://dev.to/farooquememon385/enterprise-managers-built-on-top-of-pgadmin-2166</link>
      <guid>https://dev.to/farooquememon385/enterprise-managers-built-on-top-of-pgadmin-2166</guid>
      <description>&lt;h2&gt;
  
  
  What is pgAdmin?
&lt;/h2&gt;

&lt;p&gt;pgAdmin is the most popular and feature rich Open Source administration and development platform for PostgreSQL, the most advanced Open Source database in the world.&lt;br&gt;
PgAdmin allows you to manage your PostgreSQL or EDB Postgres databases from a graphical user interface or a web browser. &lt;/p&gt;

&lt;p&gt;pgAdmin is designed to be easy to use for beginners and experts alike. It &lt;strong&gt;supports all the features of PostgreSQL from version 9.5 to 14&lt;/strong&gt;, as well as *&lt;em&gt;EDB Postgres Advanced Server from version 9.6 to 13. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;pgAdmin is &lt;strong&gt;available for Windows, Linux, and Mac OS X platforms&lt;/strong&gt;, and can be downloaded for free from the official website.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are enterprise managers?
&lt;/h2&gt;

&lt;p&gt;Enterprise managers are comprehensive management tools that extend the functionality of &lt;code&gt;pgAdmin&lt;/code&gt; by providing additional features that are essential for enterprise-level database administration and development. &lt;/p&gt;

&lt;h3&gt;
  
  
  Some of these features include:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Monitoring the performance, health, and activity of your PostgreSQL or EDB Postgres servers and databases in real time. You can view metrics such as CPU, memory, disk, network, sessions, locks, transactions, queries, replication, backups, logs, and alerts. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow You to create custom dashboards and charts to visualize the data that matters to you.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Setting up notifications and actions based on predefined or custom rules and thresholds. You can receive alerts via email, SMS, or SNMP when something goes wrong or needs your attention. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Help you to optimize the performance of your PostgreSQL or EDB Postgres servers and databases by providing recommendations and tools for tuning various parameters and settings. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Assist you to protect your data and ensure its availability by offering backup and recovery solutions for your PostgreSQL or EDB Postgres servers and databases. You can schedule full or incremental backups, restore data from backups or point-in-time recovery (PITR), verify backup integrity, encrypt backup files, compress backup size, and manage backup storage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Allow you to analyze the performance of your SQL queries and statements by providing tools for profiling and debugging. You can capture and view the execution plans of your queries and identify slow or problematic queries. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable you to manage your team members and their access to your PostgreSQL or EDB Postgres servers and databases by providing features for role-based security and auditing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to get started with enterprise managers?
&lt;/h2&gt;

&lt;p&gt;One of the most popular enterprise managers for PostgreSQL and EDB Postgres is &lt;strong&gt;Postgres Enterprise Manager (PEM)&lt;/strong&gt;, which is developed by &lt;strong&gt;EnterpriseDB&lt;/strong&gt;, which is the leading provider of enterprise-class products and services based on PostgreSQL. &lt;br&gt;
PEM is built upon pgAdmin, which means that it inherits all the features of PgAdmin plus the additional features mentioned above.&lt;br&gt;
PEM is compatible with all versions of PgAdmin&lt;/p&gt;

&lt;p&gt;To get started with PEM, you need to download the installer from the &lt;a href="https://www.enterprisedb.com/docs/pem/latest/installing/"&gt;official website&lt;/a&gt; or use a package manager such as &lt;code&gt;yum&lt;/code&gt; or &lt;code&gt;apt-get&lt;/code&gt; if you are using Linux. You &lt;strong&gt;need to install two components&lt;/strong&gt;: the &lt;strong&gt;PEM server&lt;/strong&gt; and the &lt;strong&gt;PEM agent&lt;/strong&gt;. The PEM server is the central component that manages the communication between the PEM agents and the web interface. The PEM agent is the component that collects the data from the PostgreSQL or EDB Postgres servers and databases that you want to monitor and manage. You need to install the PEM server on one machine, and the PEM agent on each machine that hosts a PostgreSQL or EDB Postgres server or database. You can also install the PEM agent on the same machine as the PEM server if you want to monitor and manage the local server or database.&lt;/p&gt;

&lt;p&gt;After installing the PEM server and the PEM agent, you need to register the PEM agent with the PEM server using the &lt;strong&gt;pemworker utility&lt;/strong&gt;. &lt;br&gt;
This utility allows you to specify the connection details of the PEM agent and the PostgreSQL or EDB Postgres server or database that you want to monitor and manage. You can also use this utility to update, unregister, or remove the PEM agent.&lt;/p&gt;

&lt;p&gt;Once you have registered the PEM agent with the PEM server, you can access the web interface of PEM by opening a browser and navigating to the URL of the PEM server. &lt;strong&gt;The default URL is &lt;code&gt;http://localhost:8080/pem&lt;/code&gt;&lt;/strong&gt;. &lt;strong&gt;You need to log in with your username and password, which are admin and admin by default&lt;/strong&gt;. You can change them later in the preferences menu.&lt;/p&gt;

&lt;p&gt;The web interface of PEM consists of three main areas: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The dashboard:&lt;/strong&gt;&lt;br&gt;
It displays an overview of your PostgreSQL or EDB Postgres servers and databases, as well as their status, metrics, alerts, and charts. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The browser:&lt;/strong&gt;&lt;br&gt;
It allows you to navigate through your servers and databases, as well as their objects and properties. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The workspace:&lt;/strong&gt;&lt;br&gt;
It allows you to perform various tasks such as creating and editing objects, running SQL queries and scripts, viewing data and query plans, generating reports and charts, and accessing other tools such as monitoring, alerting, tuning, backup and recovery, SQL profiling, team management, and auditing.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can use the web interface of PEM to monitor and manage your PostgreSQL or EDB Postgres servers and databases as you wish. You can also use pgAdmin as a standalone application or a plugin for PEM if you prefer a graphical user interface over a web browser. You can switch between pgAdmin and PEM by clicking on the pgAdmin or PEM icons in the toolbar.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache AGE
&lt;/h2&gt;

&lt;p&gt;Please Visit &lt;a href="https://age.apache.org"&gt;Apache AGE&lt;/a&gt; which is A Graph Extension to very popular Database PostgreSQL, and visit &lt;a href="https://github.com/apache/age"&gt;AGE's Github repository&lt;/a&gt; if you want to contribute.&lt;/p&gt;

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

&lt;p&gt;In this post, I have explained what pgAdmin and enterprise managers are, why they are useful for PostgreSQL and EDB Postgres users, and how you can get started with them, in last I have introduced very powerful Graph Database AGE.&lt;/p&gt;

&lt;p&gt;I hope you have found this post informative and helpful. &lt;/p&gt;

&lt;p&gt;If you have any questions or feedback, please feel free to leave a comment below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Thank you for Reading&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>apacheage</category>
      <category>pem</category>
      <category>database</category>
    </item>
    <item>
      <title>When to use RDB or GDB?</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Mon, 31 Jul 2023 18:51:36 +0000</pubDate>
      <link>https://dev.to/farooquememon385/when-to-use-rdb-or-gdb-3j9i</link>
      <guid>https://dev.to/farooquememon385/when-to-use-rdb-or-gdb-3j9i</guid>
      <description>&lt;p&gt;See the tutorial: &lt;a href="https://dev.to/farooquememon385/advantages-of-relational-db-graph-db-and-rgdb-3427"&gt;Advantages of Relational DB, Graph DB, and RGDB&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The following details will help you decide when to choose which database over the other. To maintain the existing system or to further advance the system depends entirely on your choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fast analysis or Log management
&lt;/h2&gt;

&lt;p&gt;The graph DB is suitable for predictive analytics and fraud detection because it easily finds and identifies hidden patterns that are difficult to find with a naked eye. Since it is generally optimized for data inquiry and analysis, it is an excellent choice if these are important traits to consider for the project.&lt;br&gt;
However, if there is no need for data analysis and the purpose of the project is to simply record data in logs, the relational DB may be a better choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Depth of relationship
&lt;/h2&gt;

&lt;p&gt;The graph DB is worth considering when there are numerous connections or patterns within the stored data and when meaningful insights need to be returned. It efficiently finds hidden patterns, providing additional factors to aid in decision-making. Converting structured, semi-structured, and unstructured data into a graph DB can broaden the perspective on data understanding.&lt;/p&gt;

&lt;p&gt;The relational DB is more suitable than the graph DB if the project is more transaction-oriented. Sometimes it is better to simply store and manage data rather than trying to understand the relationship between data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consistency of data model
&lt;/h2&gt;

&lt;p&gt;Finally, the graph DB is recommended when the data model needs to be changed frequently. The graph DB is schema-less, so its flexibility in adding properties is well known. Additional attributes can be added in order to understand the depth of analysis or when the attribute of certain data is not strictly defined (eg. unstructured data such as video or photos).&lt;/p&gt;

&lt;p&gt;On the other hand, table data of the relational DB boasts consistency, which becomes its advantage. When storing personal information such as name, date of birth, location, etc., the relational DB may be more efficient due to not having to change new fields or data often.&lt;/p&gt;

&lt;h2&gt;
  
  
  RGDB: a multi-model that can use both RDB &amp;amp; GDB
&lt;/h2&gt;

&lt;p&gt;At present, finding hidden insights from a vast amount of data is becoming a trend as it could mean increasing corporate competitiveness. As such, the number of cases taking advantage of the efficiency of both the relational and graph databases is increasing.&lt;br&gt;
For example, let’s say a bank has decided to build an AI management system using data from a relational DB that has been used for monitoring voice phishing. This bank has millions of accounts with transaction history and the detailed transactions between accounts and accident reports must all be recorded in a table format. The storage and management of big data can be maintained with the existing management system just fine, but among the data, some parts may require pattern tracking or deep analysis (eg. transaction info between accounts) for further insights. In that case, the said data can be transferred to the graph DB for analysis and the analyst will be able to find, for example, fraudulent activities like abnormal transactions.&lt;/p&gt;

&lt;p&gt;In fact, many of the current big data platforms implemented with the graph DB also maintain relational DB for data management. Each DB working together may be able to bring out a synergy that complements each other’s strengths and weaknesses.&lt;/p&gt;

&lt;h2&gt;
  
  
  The purpose is the key
&lt;/h2&gt;

&lt;p&gt;As there are always two sides to everything, the graph DB, despite being the latest database technology, is not a perfect solution to all problems. The same can be said of relational DBs that many companies have been using for a long time. Depending on the need of the company, either one of them or both may be required.&lt;/p&gt;

&lt;p&gt;The main reason for choosing the graph DB is to analyze data relationships. As for relational DB, it is to accurately aggregate numerous data. If you want to apply both for different purposes and increase efficiency at the same time, you may want to consider a multi-model database with a mix of the two. For example, accurate management of existing data can be done with a relational DB and data analysis with a graph DB. This is one of the ways to gain new insights while maintaining the existing data management paradigm.&lt;/p&gt;

&lt;p&gt;Before deciding which database to choose, it would be wise to consider what characteristics your data have or what you want to achieve from the data. Seeking a tip from an expert consultant regarding the decision may also be a good choice. In the end, the choice is yours to decide.&lt;/p&gt;

&lt;h2&gt;
  
  
  Visit Apache AGE:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://age.apache.org"&gt;Apache AGE official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/age"&gt;Apache AGE Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>apacheage</category>
      <category>bitnine</category>
      <category>database</category>
      <category>bigdata</category>
    </item>
    <item>
      <title>Advantages of Relational DB, Graph DB, and RGDB</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Mon, 31 Jul 2023 18:39:59 +0000</pubDate>
      <link>https://dev.to/farooquememon385/advantages-of-relational-db-graph-db-and-rgdb-3427</link>
      <guid>https://dev.to/farooquememon385/advantages-of-relational-db-graph-db-and-rgdb-3427</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Relational DB &amp;amp; Graph DB
&lt;/h2&gt;

&lt;p&gt;The relational DB and graph DB are the most popular databases known for their own respective strengths and unique characteristics. They are no more a subject of competition because one is not superior to the other.&lt;/p&gt;

&lt;p&gt;The use of &lt;strong&gt;relational DB&lt;/strong&gt; and &lt;strong&gt;graph DB&lt;/strong&gt; depends on the characteristics and purposes of the data. The table structure of a relational DB is suitable for storing records of general information or uncomplicated relationships, which is why relational DBs are generally applied in accounting or bank cash transactions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Graph DB&lt;/strong&gt;, on the other hand, is most effective for relationship-oriented analysis of complex data. This helps data experts spot unexpected connection patterns. The best-known use cases for graph DBs include social media analytics, fraud detection, and real-time recommendation engines. Mapping relationships between data also has the advantage of being easily conveyed via separate visualization tools.&lt;/p&gt;

&lt;p&gt;The two databases can offer different pros and cons in how they structure their relationships. &lt;strong&gt;NoSQL&lt;/strong&gt;, a category in which the graph DB belongs, is an abbreviation of &lt;strong&gt;“Not Only SQL”&lt;/strong&gt;, which means it does not replace the SQL of the relational DB but embraces it. The synergy effect of the graph DB optimized for data utilization and analysis along with the existing system brings new insights and reinforces decision-making for business processes.&lt;/p&gt;

&lt;p&gt;It is necessary to understand the differences between the relational DB and graph DB before applying either one of them in a project. As mentioned above, the use of each DB depends on the purpose of use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relational Database
&lt;/h2&gt;

&lt;p&gt;A relational DB stores data in tables. A table is defined by having columns and rows. Each row is identified by a unique key that links to a row in another table, and each table contains a primary key that identifies information found within the table. Since they can be divided into the same exact schema, the relational DB is able to manage data accurately.&lt;/p&gt;

&lt;p&gt;Additionally, the relational DB is divided into a logical structure of tables, a structure of physical storage. This allows data experts to make changes to the physical data structure without affecting the logical structure.&lt;/p&gt;

&lt;p&gt;The relational DB requires additional tables containing information from existing tables to model the relationship with other tables. As shown in the image below, you can see a network of tables linked to analyze the products the customer has purchased.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Graph Database
&lt;/h2&gt;

&lt;p&gt;While the relational DB can only manage structured data, the NoSQL databases are able to analyze semi-structured and unstructured data as well. These data are generally schema-less, hence the reason why relational DB struggles to manage them.&lt;/p&gt;

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

&lt;p&gt;According to the trend chart from DB-Engines.com, the graph database is the most popular database in the NoSQL market. It is showing overwhelming growth in the market, which signifies the recognition of its future value. Gartner, one of the global market research institutes, predicts that by 2025, 80% of companies around the world will use the graph DB.&lt;/p&gt;

&lt;p&gt;The basic components of a graph DB are as follows: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Node&lt;/strong&gt;: the main object of the graph. Similar to ‘row’ in RDB&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Edge&lt;/strong&gt;: expresses the relationship between objects. Similar to the ‘foreign key’ of RDB&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Label&lt;/strong&gt;: a property that groups similar nodes together&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Propertie&lt;/strong&gt;s: keys/values stored within a node or edge (relationship)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iHY9BuNG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rb7515t5g8ptxvwj5x3u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iHY9BuNG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rb7515t5g8ptxvwj5x3u.png" alt="Social Network in Graph" width="486" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the social network graph shown above, everyone is represented by a single node labeled as &lt;code&gt;Person&lt;/code&gt;. This node contains properties such as name, gender, location, and email. Relationships (edge) between people in that network are specified as &lt;code&gt;FRIENDS_WITH&lt;/code&gt; with a time period of their friendship included as a property as well. A person node is also connected with a location node with an edge named, &lt;code&gt;LIVES_IN&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The image above is a simple example, but it shows the general idea of how a relationship of data is expressed in the graph DB. Adding properties to some nodes can be done easily in a graph DB, so it gives data experts more flexibility when it comes to data modeling. The graph DB is able to extract values and retrieve meaningful insights for the analysts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bitnine.net/blog-graph-database/relational-db-graph-db-rgdb/"&gt;Bitnine Global Inc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Visit Bitnine and Apache AGE
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://age.apache.org"&gt;Apache AGE official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/age"&gt;Apache AGE Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>apacheage</category>
      <category>db</category>
      <category>database</category>
      <category>bitnine</category>
    </item>
    <item>
      <title>Explainable AI and Graph Database</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Mon, 31 Jul 2023 16:56:12 +0000</pubDate>
      <link>https://dev.to/farooquememon385/explainable-ai-and-graph-database-45e9</link>
      <guid>https://dev.to/farooquememon385/explainable-ai-and-graph-database-45e9</guid>
      <description>&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%2F8n9in83dj8qnyhifcwuw.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%2F8n9in83dj8qnyhifcwuw.png" alt="Explainable AI - XAI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is XAI - Explainable AI
&lt;/h2&gt;

&lt;p&gt;Explainable AI is a term that refers to artificial intelligence systems that can provide understandable and transparent explanations for their decisions or predictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Explainable AI &amp;amp; Machine Learning &amp;amp; Graph Analytics
&lt;/h2&gt;

&lt;p&gt;With the growing adoption of machine learning, explainable models are becoming a hot industry topic. Predictive models based on traditional neural and deep learning networks are known for their ambiguity on how a particular outcome came to be, whereas an explainable model could by showing some key variables. &lt;/p&gt;

&lt;h3&gt;
  
  
  Decision Tree - A Classic Example
&lt;/h3&gt;

&lt;p&gt;A classic example of an explainable model is a decision tree. The decision tree generally has a form of a special kind of graph. &lt;/p&gt;

&lt;h3&gt;
  
  
  Graph Interpretation
&lt;/h3&gt;

&lt;p&gt;Similarly, using graph algorithms or graph features as part of an AI model can easily interpret natural meaning in graph relationships, such as, “customer–(purchases)–&amp;gt;product”. &lt;/p&gt;

&lt;h3&gt;
  
  
  Advantages of XAI
&lt;/h3&gt;

&lt;p&gt;Explainable AI models have many advantages. For example, if a personalized recommendation model has an explanation or evidence for its outcome, users are more likely to trust and prefer the said model over the standard ones. Graph analytics is also suitable for calculating and displaying evidence by explaining with graph visualization when needed. It may show products of other users with similar interests to you, or products that are similar to products that users have previously purchased on a network of purchased items. &lt;/p&gt;

&lt;h3&gt;
  
  
  Use of Graph in traditional ML
&lt;/h3&gt;

&lt;p&gt;The graph-based analytics and machine learning are useful not only for customers but also for corporate users. Many companies employ large teams of trained analysts to determine whether a transaction is potentially fraudulent. With the help of a fraud detection system (FDS) powered by graph algorithms, the analysts are able to connect multiple data sources with nodes and edges to visually show potential fraudulent transactions. The graph based FDS is far more effective than existing machine learning models that judge fraud based on scores. &lt;/p&gt;

&lt;p&gt;Another example is phone scam prevention. There are millions of calls that occur every day, but only a small percentage of these are malicious scams. When implemented appropriately, the graph technology combined with machine learning can quickly explore the relationship between sender, phone number, and recipient, and develop a model that detects which call is fraudulent.  &lt;/p&gt;

&lt;h3&gt;
  
  
  XAI and Graph Analytics
&lt;/h3&gt;

&lt;p&gt;Explainable AI (&amp;amp; ML) combined with graph analytics is also useful for regulators and auditors. Banks require advanced methods to detect possible money laundering. Many banks are leveraging machine learning to increase detection accuracy, but at the same time, they need to be able to show auditors the process that their systems are working effectively. ML models using graph-based features provide the necessary transparency. &lt;/p&gt;

&lt;h2&gt;
  
  
  Graph processes large data quickly &amp;amp; efficiently
&lt;/h2&gt;

&lt;p&gt;Machine learning is often computationally demanding, and graph-based machine learning is no exception. As the size of the linked data expands exponentially, a fast computation is required to traverse the data. Even a typical graph database may not be able to handle deep link analysis with large amounts of graph data. This is why we need a graph database that can process large amounts of data quickly and efficiently.&lt;/p&gt;

&lt;p&gt;In order to explain the results of personalized recommendations and fraud detection, powerful queries in the graph database must traverse connections in the graph data, and calculations such as filtering and aggregation must be performed to support complex data structures.&lt;/p&gt;

&lt;p&gt;Deeplink graph analytics powers the ability to learn graph patterns and supports the next generation of machine learning by providing explainable models. When combined with AI and ML, the graph-powered explainable AI will be a force to be reckoned with and benefit businesses for years to come.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://bitnine.net/blog-graph-database/explainable-ai-graph-database/" rel="noopener noreferrer"&gt;Bitnine Global Inc&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Also Visit Apache AGE
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://age.apache.org" rel="noopener noreferrer"&gt;Apache AGE Official site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/age" rel="noopener noreferrer"&gt;Apache AGE Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>graphdatabase</category>
      <category>bitnine</category>
      <category>apacheage</category>
    </item>
    <item>
      <title>AgensSQL - Bitnine Global Inc</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Sun, 30 Jul 2023 15:43:17 +0000</pubDate>
      <link>https://dev.to/farooquememon385/agenssql-bitnine-global-inc-1g2m</link>
      <guid>https://dev.to/farooquememon385/agenssql-bitnine-global-inc-1g2m</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;AgensSQL: an integration of Bitnine’s DB technology and PG expertise, is an all-new relational DBMS based on PostgreSQL, with years of expertise and knowledge accumulated through database research and development.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agens Enterprise Package:
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Usability
&lt;/h3&gt;

&lt;h4&gt;
  
  
  AEM (Agens Enterprise Manager)
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;DB Operation/Management (Monitoring Dashboard)&lt;/li&gt;
&lt;li&gt;SQL Edit/Execute/Inquiry (HA &amp;amp; Extension Management)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Scalability
&lt;/h3&gt;

&lt;h4&gt;
  
  
  AgensSQL Extension Server
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;AHM (Agens HA Manager)&lt;/li&gt;
&lt;li&gt;Load Balancer (Backup/Restore)&lt;/li&gt;
&lt;li&gt;Data Sharding&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Stability
&lt;/h3&gt;

&lt;h4&gt;
  
  
  AgensSQL DB Engine
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;PostgreSQL 12 (Data Security)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c98PT99P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emf5jp2r1qpn865soseu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c98PT99P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emf5jp2r1qpn865soseu.png" alt="Image Showing Architecture of Agens Enterprise Package" width="800" height="668"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;p&gt;﻿Manage your data with Agens Enterprise Package Essential enterprise features such as high availability and sharding are provided&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Security
&lt;/h3&gt;

&lt;p&gt;Various security features are added to ensure security and stability of data.&lt;/p&gt;

&lt;h3&gt;
  
  
  High Availability
&lt;/h3&gt;

&lt;p&gt;In the event of main system failure, the standby server minimizes downtime by restoring the system.&lt;/p&gt;

&lt;h3&gt;
  
  
  Monitoring
&lt;/h3&gt;

&lt;p&gt;Monitoring dashboard views overall status of the DB such as query analysis, operating environment status, database audit, etc.&lt;/p&gt;

&lt;h3&gt;
  
  
  Data Sharding
&lt;/h3&gt;

&lt;p&gt;Distribute a single dataset across multiple databases, increasing the total storage capacity of the system.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Downloads
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://bitnine.net/agensgraph-downloads/"&gt;Download Section of Bitnine Global&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Also Visit Apache AGE
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://age.apache.org"&gt;Official Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/age"&gt;Apache AGE Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>bitnine</category>
      <category>apacheage</category>
      <category>agenssql</category>
      <category>agensgraph</category>
    </item>
    <item>
      <title>Advanced Tutorial for Cypher (Part 2)</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Sun, 16 Jul 2023 17:56:06 +0000</pubDate>
      <link>https://dev.to/farooquememon385/advanced-tutorial-for-cypher-part-2-37p5</link>
      <guid>https://dev.to/farooquememon385/advanced-tutorial-for-cypher-part-2-37p5</guid>
      <description>&lt;p&gt;This Tutorial is extension of The tutorial &lt;a href="https://dev.to/farooquememon385/advanced-tutorial-for-cypher-b8l"&gt;Advanced Tutorial for Cypher Part (1)&lt;/a&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  Create Stored Procedure (1)
&lt;/h3&gt;

&lt;p&gt;You can create Stored Procedure as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;fn_array_uniq function&lt;/strong&gt; enters an array and returns a unique factor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IMMUTABLE&lt;/strong&gt; represents the classification of the volatility of the procedure. Has the characteristics of calculating and processing returns as constants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;STRICT&lt;/strong&gt; returns a null value whenever the argument is null.&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;GENERATE_SERIES&lt;/strong&gt; function takes** (start, stop, step interval)** as input variables and increments and decreases it to the units set in step interval&lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;ARRAY_LOWER / ARRAY_UPPER&lt;/strong&gt; function returns the lower/upper limit of the array dimension.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE FUNCTION fn_array_uniq (anyarray)
RETURNS anyarray 
IMMUTABLE STRICT LANGUAGE SQL 
AS 
$$
SELECT ARRAY (
SELECT DISTINCT $1[i] 
FROM GENERATE_SERIES
(ARRAY_LOWER($1,1), ARRAY_UPPER($1,1)) AS g(i));
$$;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Create Stored Procedure (2)
&lt;/h3&gt;

&lt;p&gt;You can create Stored Procedure as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ids is a function that takes id of the unique vertex as a factor and appends it to the array.&lt;/li&gt;
&lt;li&gt;IF [Conditions] Then [True Execution Code] END IF [False Execution Code]
Perform execution code when true or false, depending on the conditions.&lt;/li&gt;
&lt;li&gt;FOREACH [Execution Code]
Performs an execution code with each row as a factor.&lt;/li&gt;
&lt;li&gt;LOOP [Repeat Execution Code] END LOOP
Repeat the execution code in the Loop section until there is no input.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE FUNCTION ids(vertex[]) RETURNS text[] AS $$
DECLARE
v vertex;    vids text[];
BEGIN
IF $1 IS NULL THEN
RETURN ARRAY[]::text[];
END IF;
FOREACH v IN ARRAY $1 
LOOP        vids = array_append(vids,
id(v)::text);
END LOOP;
vids = vids[2:];    RETURN vids;
END;
$$ LANGUAGE plpgsql;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Check the Fraud Ring
&lt;/h3&gt;

&lt;p&gt;Explore the raid ring with Cypher Query using Stored Procedure.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT cy.path
FROM (match path = (person:person)-[*..]-(person) with path,ids(nodes(path)) as node
    return path,length(fn_array_uniq(node)) as dcnt, length(node) as cnt) cy
WHERE cnt = dcnt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use the fn_array_uniq function to query the unique Node ID of the Path to be viewed as an array.&lt;/li&gt;
&lt;li&gt;Use the Ids function to extract only the Node IDs to consider and count and compare them.&lt;/li&gt;
&lt;li&gt;GraphPath that meets the previous conditions among the Paths inquired in the Match clause is printed and inquired.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Explore
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://agcloud.bitnine.net"&gt;AGCloud&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://age.apache.org"&gt;Apache AGE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/age"&gt;Apache AGE Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>apacheage</category>
      <category>agensgraph</category>
      <category>graphdatabase</category>
      <category>cypher</category>
    </item>
    <item>
      <title>Advanced Tutorial for Cypher (Part 1)</title>
      <dc:creator>Muhammad Farooq</dc:creator>
      <pubDate>Sat, 15 Jul 2023 19:02:14 +0000</pubDate>
      <link>https://dev.to/farooquememon385/advanced-tutorial-for-cypher-b8l</link>
      <guid>https://dev.to/farooquememon385/advanced-tutorial-for-cypher-b8l</guid>
      <description>&lt;p&gt;Before reading this blog, you must know the basics of Graph database and Cypher&lt;/p&gt;

&lt;p&gt;if you are not familiar with that you can read these blogs&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/farooquememon385/understanding-graph-database-and-cypher-25gm"&gt;Understanding Graph Database and Cypher&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/farooquememon385/create-our-first-graph-in-agensgraph-3em0"&gt;Create Our First Graph in AgensGraph&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;To assist in querying graph DB, Stored Procedure can be used using the PL/pgSQL language provided by PostgreSQL.&lt;br&gt;
You can view and handle graph data more efficiently.&lt;/p&gt;
&lt;h3&gt;
  
  
  AgensGraph
&lt;/h3&gt;

&lt;p&gt;Agens Graph is a multi-model graph database fork of PostgreSQL. PostgreSQL introduced Stored Procedure for better productivity and performance.&lt;/p&gt;
&lt;h3&gt;
  
  
  Stored Procedures
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Stored Procedure uses PL/pgSQL language to provide fast response and convenience, as well as the foundation for extending the functionality of PostgreSQL itself.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Stored Procedure can help query variables used in Cypher queries or convert variables into types.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Basic Procedure Structure
&lt;/h3&gt;

&lt;blockquote&gt;

&lt;/blockquote&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE Function function_name (parameter1 type, parameter2 type)
RETURNS return_type AS
BEGIN
    [CODE]
END;
LANGUAGE language_name;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Procedure can be created with CREATE Function statement,&lt;/p&gt;

&lt;p&gt;Specifies the name and factor of the function, the type of factor, and the type of return factor.&lt;/p&gt;

&lt;p&gt;Between BEGIN and END, write the code for the function to execute.&lt;/p&gt;

&lt;p&gt;Use LANGUAGE to specify the language used in the function instead of language_name.&lt;/p&gt;
&lt;h2&gt;
  
  
  Find Fraud Ring (An Example)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Find out how to use Procedure through the public fraud graph.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Find out how to use Procedure in practice through the insurance fraud graph we checked earlier.&lt;/li&gt;
&lt;li&gt;Fraud Ring is an example of a cycle structure that occurs between two or more criminals during a public fraud.&lt;/li&gt;
&lt;li&gt;Traditional graph pattern searches have a large number of cases or complicatedly intertwined, making them difficult to recognize at a glance and limited in obtaining the desired results.&lt;/li&gt;
&lt;li&gt;With the help of Stored Procedure, let's explore Path to avoid duplicating the ID of the Vertex that makes up the Fraud Ring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use the conspiracy fraud graph to learn how to use Procedure.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, you need to look up the Graph Path of the Cycle structure passing through the specified vertex. &lt;/li&gt;
&lt;li&gt;You can query any path that contains it by specifying the specified Vertex as a query in the Cypher language.&lt;/li&gt;
&lt;li&gt;Duplicate Paths may exist because they are output without considering bidirectional edges.&lt;/li&gt;
&lt;li&gt;The unique Vertex ID can be retrieved from the path inquired through Stored Procedure to exclude cases where the same path appears.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---RNp7d23--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h2xa8kzv061e7u7j2hyn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---RNp7d23--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h2xa8kzv061e7u7j2hyn.png" alt="Image for graph of Fraud Detection" width="259" height="204"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Create Graph
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Paste the following Code in &lt;a href="https://agcloud.bitnine.net"&gt;AGCloud's&lt;/a&gt; AGviewer to Create the Graph&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE(Male101:person{Name:'Male101', Gender:'Male', Age:'37', Residence:'Philadelphia'})
CREATE(Female101:person{Name:'Female101', Gender:'Female', Age:'39',Residence:'Houston'})
CREATE(Male102:person{Name:'Male102', Gender:'Male', Age:'45',Residence:'San Francisco'})
CREATE(Male103:person{Name:'Male103', Gender:'Male', Age:'41',Residence:'San Francisco'})
CREATE(Female102:person{Name:'Female102', Gender:'Female', Age:'35',Residence:'New York'})
CREATE(Male104:person{Name:'Male104', Gender:'Male', Age:'29',Residence:'New York'})
CREATE(Male105:person{Name:'Male105', Gender:'Male', Age:'51',Residence:'Chicago'})
CREATE(Female103:person{Name:'Female103', Gender:'Female', Age:'27',Residence:'New York'})
CREATE(Male106:person{Name:'Male106', Gender:'Male', Age:'29', Residence:'New York'})
CREATE(Male107:person{Name:'Male107', Gender:'Male', Age:'30', Residence:'New York'})
CREATE(Male108:person{Name:'Male108', Gender:'Male', Age:'31', Residence:'New York'})
CREATE(Male109:person{Name:'Male109', Gender:'Male', Age:'25', Residence:'New York'})
CREATE(Male110:person{Name:'Male110', Gender:'Male', Age:'25', Residence:'New York'})
CREATE(Male111:person{Name:'Male111', Gender:'Male', Age:'28', Residence:'New York'})
CREATE(Male112:person{Name:'Male112', Gender:'Male', Age:'33', Residence:'New York'})
CREATE(Male113:person{Name:'Male113', Gender:'Male', Age:'53', Residence:'New York'})
CREATE(Male114:person{Name:'Male114', Gender:'Male', Age:'22', Residence:'New York'})
CREATE(Male115:person{Name:'Male115', Gender:'Male', Age:'29', Residence:'Chicago'})
CREATE(Male116:person{Name:'Male116', Gender:'Male', Age:'46', Residence:'Chicago'})
CREATE(Male117:person{Name:'Male117', Gender:'Male', Age:'27', Residence:'Chicago'})
CREATE(Male118:person{Name:'Male118', Gender:'Male', Age:'27', Residence:'Chicago'})
CREATE(Male119:person{Name:'Male119', Gender:'Male', Age:'49', Residence:'San Francisco'})
CREATE(Male120:person{Name:'Male120', Gender:'Male', Age:'23', Residence:'San Francisco'})
CREATE(Male121:person{Name:'Male121', Gender:'Male', Age:'37', Residence:'San Francisco'})
CREATE(Male122:person{Name:'Male122', Gender:'Male', Age:'35', Residence:'San Francisco'})
CREATE(Male123:person{Name:'Male123', Gender:'Male', Age:'42', Residence:'San Francisco'})
CREATE(Male124:person{Name:'Male124', Gender:'Male', Age:'29', Residence:'San Francisco'})
CREATE(Male125:person{Name:'Male125', Gender:'Male', Age:'28', Residence:'San Francisco'})
CREATE(Male126:person{Name:'Male126', Gender:'Male', Age:'30', Residence:'San Francisco'})
CREATE(Male127:person{Name:'Male127', Gender:'Male', Age:'46', Residence:'San Francisco'})
CREATE(Male128:person{Name:'Male128', Gender:'Male', Age:'46', Residence:'San Francisco'})
CREATE(Male129:person{Name:'Male129', Gender:'Male', Age:'23', Residence:'San Francisco'})
CREATE(Male130:person{Name:'Male130', Gender:'Male', Age:'42', Residence:'San Francisco'})
CREATE(Female104:person{Name:'Female104', Gender:'Female', Age:'34', Residence:'New York'})
CREATE(Female105:person{Name:'Female105', Gender:'Female', Age:'38', Residence:'New York'})
CREATE(Female106:person{Name:'Female106', Gender:'Female', Age:'56', Residence:'New York'})
CREATE(Female107:person{Name:'Female107', Gender:'Female', Age:'28', Residence:'New York'})
CREATE(Female108:person{Name:'Female108', Gender:'Female', Age:'30', Residence:'New York'})
CREATE(Female109:person{Name:'Female109', Gender:'Female', Age:'41', Residence:'New York'})
CREATE(Female110:person{Name:'Female110', Gender:'Female', Age:'21', Residence:'New York'})
CREATE(Female111:person{Name:'Female111', Gender:'Female', Age:'56', Residence:'New York'})
CREATE(Female112:person{Name:'Female112', Gender:'Female', Age:'44', Residence:'New York'})
CREATE(Female113:person{Name:'Female113', Gender:'Female', Age:'42', Residence:'San Francisco'})
CREATE(Female114:person{Name:'Female114', Gender:'Female', Age:'21', Residence:'San Francisco'})
CREATE(Female115:person{Name:'Female115', Gender:'Female', Age:'28', Residence:'San Francisco'})
CREATE(Female116:person{Name:'Female116', Gender:'Female', Age:'58', Residence:'San Francisco'})
CREATE(Female117:person{Name:'Female117', Gender:'Female', Age:'42', Residence:'San Francisco'})
CREATE(Female118:person{Name:'Female118', Gender:'Female', Age:'49', Residence:'San Francisco'})
CREATE(Female119:person{Name:'Female119', Gender:'Female', Age:'51', Residence:'Chicago'})
CREATE(Female120:person{Name:'Female120', Gender:'Female', Age:'27', Residence:'Chicago'})


-- CREATE CARS
CREATE(N1111:car{Car_num:'1111',Manufacturer:'Hyundai-Kia', Name:'K5'})
CREATE(N1234:car{Car_num:'1234',Manufacturer:'Ford', Name:'Explorer'})
CREATE(N1512:car{Car_num:'1512',Manufacturer:'Hyundai-Kia', Name:'Sorento'})
CREATE(N1616:car{Car_num:'1616',Manufacturer:'Volkswagen', Name:'POLO'})
CREATE(N1717:car{Car_num:'1717',Manufacturer:'Chevrole', Name:'Cruze'})
CREATE(N1712:car{Car_num:'1712',Manufacturer:'BMW', Name:'BMW520'})
CREATE(N2706:car{Car_num:'2706',Name:'The BEETLE',Manufacturer:'Volkswagen'})
CREATE(N5793:car{Car_num:'5793',Name:'Scirocco',Manufacturer:'Volkswagen'})
CREATE(N4278:car{Car_num:'4278',Name:'JETTA'    ,Manufacturer:'Volkswagen'})
CREATE(N5241:car{Car_num:'5241',Name:'CELTOS',Manufacturer:'Hyundai-Kia'})
CREATE(N4176:car{Car_num:'4176',Name:'Kuga',Manufacturer:'Ford'})
CREATE(N6512:car{Car_num:'6512',Name:'GOLF',Manufacturer:'Volkswagen'})
CREATE(N5595:car{Car_num:'5595',Name:'A3',Manufacturer:'Audi'})
CREATE(N8523:car{Car_num:'8523',Name:'Sportage',Manufacturer:'Hyundai-Kia'})
CREATE(N4332:car{Car_num:'4332',Name:'Mustang',Manufacturer:'Ford'})
CREATE(N9908:car{Car_num:'9908',Name:'POLO',Manufacturer:'Volkswagen'})
CREATE(N5761:car{Car_num:'5761',Name:'K5',Manufacturer:'Hyundai-Kia'})
CREATE(N1679:car{Car_num:'1679',Name:'Cruze',Manufacturer:'Chevrole'})
CREATE(N9942:car{Car_num:'9942',Name:'A3',Manufacturer:'Audi'})
CREATE(N9150:car{Car_num:'9150',Name:'GOLF',Manufacturer:'Volkswagen'})
CREATE(N8644:car{Car_num:'8644',Name:'POLO',Manufacturer:'Volkswagen'})
CREATE(N6712:car{Car_num:'6712',Name:'K5',Manufacturer:'Hyundai-Kia'})
CREATE(N8334:car{Car_num:'8334',Name:'POLO' ,Manufacturer:'Volkswagen'})
CREATE(N9330:car{Car_num:'9330',Name:'K5',Manufacturer:'Hyundai-Kia'})
CREATE(N3454:car{Car_num:'3454',Name:'Morning',Manufacturer:'Hyundai-Kia'})
CREATE(N7236:car{Car_num:'7236',Name:'Morning',Manufacturer:'Hyundai-Kia'})
CREATE(N8076:car{Car_num:'8076',Name:'Ray',Manufacturer:'Hyundai-Kia'})
CREATE(N7445:car{Car_num:'7445',Name:'BMW520',Manufacturer:'BMW'})



-- CREATE ACCIDENTS

CREATE (ACC19111:accident {Name:'19111', accident_date:'19/05/2020', City:'New York'})
CREATE (ACC19222:accident {Name:'19222', accident_date:'23/05/2020', City:'Chicago'})
CREATE (ACC19333:accident {Name:'19333', accident_date:'27/05/2020', City:'Jacksonville'})
CREATE (ACC19292:accident {Name:'19292', accident_date:'11/05/2020',City:'New York'})
CREATE (ACC19419:accident {Name:'19419', accident_date:'13/05/2020',City:'Chicago'})
CREATE (ACC19314:accident {Name:'19314', accident_date:'08/05/2020',City:'Jacksonville'})
CREATE (ACC19400:accident {Name:'19400', accident_date:'10/05/2020',City:'Dallas'})
CREATE (ACC19830:accident {Name:'19830', accident_date:'16/05/2020',City:'Phoenix'})
CREATE (ACC19706:accident {Name:'19706', accident_date:'16/05/2020',City:'San Diego'})
CREATE (ACC19666:accident {Name:'19666', accident_date:'14/05/2020',City:'San Jose'})
CREATE (ACC19104:accident {Name:'19104', accident_date:'03/05/2020',City:'New York'})
CREATE (ACC19430:accident {Name:'19430', accident_date:'10/05/2020',City:'Dallas'})
CREATE (ACC19223:accident {Name:'19223', accident_date:'22/05/2020',City:'Jacksonville'})
CREATE (ACC19565:accident {Name:'19565', accident_date:'14/05/2020',City:'Chicago'})


-- CREATE CARS_ACCIDENTS EDGES
CREATE (N1111)-[:IS_INVOLVED]-&amp;gt;(ACC19111)
MERGE (N1234)-[:IS_INVOLVED]-&amp;gt;(ACC19111)
MERGE (N1512)-[:IS_INVOLVED]-&amp;gt;(ACC19222)
MERGE (N1616)-[:IS_INVOLVED]-&amp;gt;(ACC19222)
MERGE (N1717)-[:IS_INVOLVED]-&amp;gt;(ACC19333)
MERGE (N1712)-[:IS_INVOLVED]-&amp;gt;(ACC19333)
MERGE (N2706)-[:IS_INVOLVED]-&amp;gt;(ACC19292)
MERGE (N5793)-[:IS_INVOLVED]-&amp;gt;(ACC19292)
MERGE (N4278)-[:IS_INVOLVED]-&amp;gt;(ACC19419)
MERGE (N5241)-[:IS_INVOLVED]-&amp;gt;(ACC19419)
MERGE (N4176)-[:IS_INVOLVED]-&amp;gt;(ACC19314)
MERGE (N6512)-[:IS_INVOLVED]-&amp;gt;(ACC19314)
MERGE (N5595)-[:IS_INVOLVED]-&amp;gt;(ACC19400)
MERGE (N8523)-[:IS_INVOLVED]-&amp;gt;(ACC19400)
MERGE (N4332)-[:IS_INVOLVED]-&amp;gt;(ACC19830)
MERGE (N9908)-[:IS_INVOLVED]-&amp;gt;(ACC19830)
MERGE (N5761)-[:IS_INVOLVED]-&amp;gt;(ACC19706)
MERGE (N1679)-[:IS_INVOLVED]-&amp;gt;(ACC19706)
MERGE (N9942)-[:IS_INVOLVED]-&amp;gt;(ACC19666)
MERGE (N9150)-[:IS_INVOLVED]-&amp;gt;(ACC19666)
MERGE (N8644)-[:IS_INVOLVED]-&amp;gt;(ACC19104)
MERGE (N6712)-[:IS_INVOLVED]-&amp;gt;(ACC19104)
MERGE (N2706)-[:IS_INVOLVED]-&amp;gt;(ACC19292)
MERGE (N5793)-[:IS_INVOLVED]-&amp;gt;(ACC19292)
MERGE (N4278)-[:IS_INVOLVED]-&amp;gt;(ACC19419)
MERGE (N5241)-[:IS_INVOLVED]-&amp;gt;(ACC19419)
MERGE (N4176)-[:IS_INVOLVED]-&amp;gt;(ACC19314)
MERGE (N6512)-[:IS_INVOLVED]-&amp;gt;(ACC19314)
MERGE (N5595)-[:IS_INVOLVED]-&amp;gt;(ACC19400)
MERGE (N8523)-[:IS_INVOLVED]-&amp;gt;(ACC19400)
MERGE (N4332)-[:IS_INVOLVED]-&amp;gt;(ACC19830)
MERGE (N8334)-[:IS_INVOLVED]-&amp;gt;(ACC19430)
MERGE (N9330)-[:IS_INVOLVED]-&amp;gt;(ACC19430)
MERGE (N3454)-[:IS_INVOLVED]-&amp;gt;(ACC19223)
MERGE (N7236)-[:IS_INVOLVED]-&amp;gt;(ACC19223)
MERGE (N8076)-[:IS_INVOLVED]-&amp;gt;(ACC19565)
MERGE (N7445)-[:IS_INVOLVED]-&amp;gt;(ACC19565)
MERGE (N9908)-[:IS_INVOLVED]-&amp;gt;(ACC19830)
MERGE (N5761)-[:IS_INVOLVED]-&amp;gt;(ACC19706)
MERGE (N1679)-[:IS_INVOLVED]-&amp;gt;(ACC19706)
MERGE (N9942)-[:IS_INVOLVED]-&amp;gt;(ACC19666)
MERGE (N9150)-[:IS_INVOLVED]-&amp;gt;(ACC19666)
MERGE (N8644)-[:IS_INVOLVED]-&amp;gt;(ACC19430)
MERGE (N6712)-[:IS_INVOLVED]-&amp;gt;(ACC19430)
MERGE (N2706)-[:IS_INVOLVED]-&amp;gt;(ACC19223)
MERGE (N5793)-[:IS_INVOLVED]-&amp;gt;(ACC19223)
MERGE (N4278)-[:IS_INVOLVED]-&amp;gt;(ACC19565)
MERGE (N5241)-[:IS_INVOLVED]-&amp;gt;(ACC19565)



CREATE (Male101)-[:DRIVER]-&amp;gt;(N1111)
CREATE (Male101)-[:PASSENGER]-&amp;gt;(N1512)
CREATE (Male101)-[:PASSENGER]-&amp;gt;(N1717)
CREATE (Female101)-[:DRIVER]-&amp;gt;(N1234)
CREATE (Female101)-[:PASSENGER]-&amp;gt;(N1616)
CREATE (Female101)-[:PASSENGER]-&amp;gt;(N1712)
CREATE (Male102)-[:DRIVER]-&amp;gt;(N1512)
CREATE (Male102)-[:PASSENGER]-&amp;gt;(N1111)
CREATE (Male102)-[:PASSENGER]-&amp;gt;(N1712)
CREATE (Male103)-[:DRIVER]-&amp;gt;(N1616)
CREATE (Male103)-[:PASSENGER]-&amp;gt;(N1717)
CREATE (Male103)-[:PASSENGER]-&amp;gt;(N1234)
CREATE (Female102)-[:DRIVER]-&amp;gt;(N1717)
CREATE (Female102)-[:PASSENGER]-&amp;gt;(N1616)
CREATE (Female102)-[:PASSENGER]-&amp;gt;(N1111)
CREATE (Male104)-[:DRIVER]-&amp;gt;(N1712)
CREATE (Male104)-[:PASSENGER]-&amp;gt;(N1234)
CREATE (Male104)-[:PASSENGER]-&amp;gt;(N1512)
CREATE (Male105)-[:IS_DOCTOR]-&amp;gt;(Male101)
CREATE (Male105)-[:IS_DOCTOR]-&amp;gt;(Male102)
CREATE (Male105)-[:IS_DOCTOR]-&amp;gt;(Female102)
CREATE (Female103)-[:IS_INSU_AGENT]-&amp;gt;(Female101)
CREATE (Female103)-[:IS_INSU_AGENT]-&amp;gt;(Male102)
CREATE (Female103)-[:IS_INSU_AGENT]-&amp;gt;(Male103)
CREATE (Female103)-[:IS_INSU_AGENT]-&amp;gt;(Female102)
CREATE (Male106)-[:DRIVER]-&amp;gt;(N2706)
CREATE (Male107)-[:DRIVER]-&amp;gt;(N5793)
CREATE (Male108)-[:DRIVER]-&amp;gt;(N4278)
CREATE (Male109)-[:DRIVER]-&amp;gt;(N5241)
CREATE (Male110)-[:DRIVER]-&amp;gt;(N4176)
CREATE (Male111)-[:DRIVER]-&amp;gt;(N6512)
CREATE (Male112)-[:DRIVER]-&amp;gt;(N5595)
CREATE (Male113)-[:DRIVER]-&amp;gt;(N8523)
CREATE (Male114)-[:DRIVER]-&amp;gt;(N4332)
CREATE (Male115)-[:DRIVER]-&amp;gt;(N9908)
CREATE (Male116)-[:DRIVER]-&amp;gt;(N5761)
CREATE (Male117)-[:DRIVER]-&amp;gt;(N1679)
CREATE (Male118)-[:DRIVER]-&amp;gt;(N9942)
CREATE (Male119)-[:DRIVER]-&amp;gt;(N9150)
CREATE (Male120)-[:DRIVER]-&amp;gt;(N8644)
CREATE (Male121)-[:DRIVER]-&amp;gt;(N6712)
CREATE (Male122)-[:PASSENGER]-&amp;gt;(N2706)
CREATE (Male123)-[:PASSENGER]-&amp;gt;(N5793)
CREATE (Male124)-[:PASSENGER]-&amp;gt;(N4278)
CREATE (Male125)-[:PASSENGER]-&amp;gt;(N5241)
CREATE (Male126)-[:PASSENGER]-&amp;gt;(N4176)
CREATE (Male127)-[:PASSENGER]-&amp;gt;(N6512)
CREATE (Male128)-[:PASSENGER]-&amp;gt;(N5595)
CREATE (Male129)-[:PASSENGER]-&amp;gt;(N8523)
CREATE (Male130)-[:PASSENGER]-&amp;gt;(N4332)
CREATE (Female104)-[:DRIVER]-&amp;gt;(N8334)
CREATE (Female105)-[:DRIVER]-&amp;gt;(N9330)
CREATE (Female106)-[:DRIVER]-&amp;gt;(N3454)
CREATE (Female107)-[:DRIVER]-&amp;gt;(N7236)
CREATE (Female108)-[:DRIVER]-&amp;gt;(N8076)
CREATE (Female109)-[:DRIVER]-&amp;gt;(N7445)
CREATE (Female110)-[:PASSENGER]-&amp;gt;(N9908)
CREATE (Female111)-[:PASSENGER]-&amp;gt;(N5761)
CREATE (Female112)-[:PASSENGER]-&amp;gt;(N1679)
CREATE (Female113)-[:PASSENGER]-&amp;gt;(N9942)
CREATE (Female114)-[:PASSENGER]-&amp;gt;(N9150)
CREATE (Female115)-[:PASSENGER]-&amp;gt;(N8644)
CREATE (Female116)-[:PASSENGER]-&amp;gt;(N6712)
CREATE (Female117)-[:PASSENGER]-&amp;gt;(N2706)
CREATE (Female118)-[:PASSENGER]-&amp;gt;(N5793)
CREATE (Female119)-[:PASSENGER]-&amp;gt;(N4278)
CREATE (Female120)-[:PASSENGER]-&amp;gt;(N5241);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;To be Continued in &lt;a href="https://dev.to/farooquememon385/advanced-tutorial-for-cypher-part-2-37p5"&gt;Next Tutorial&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Visit Apache AGE
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://age.apache.org"&gt;Official Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/apache/age"&gt;Github Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>agensgraph</category>
      <category>apacheage</category>
      <category>postgres</category>
      <category>cypher</category>
    </item>
  </channel>
</rss>
