diff --git a/util/rich-indexer/src/store.rs b/util/rich-indexer/src/store.rs
index abd95914a0..1855997983 100644
--- a/util/rich-indexer/src/store.rs
+++ b/util/rich-indexer/src/store.rs
@@ -70,6 +70,7 @@ impl SQLXPool {
                 pool
             }
             DBDriver::Postgres => {
+                self.postgres_init(db_config).await?;
                 let uri = build_url_for_postgres(db_config);
                 let connection_options =
                     AnyConnectOptions::from_str(&uri)?.log_statements(LevelFilter::Trace);
@@ -79,9 +80,6 @@ impl SQLXPool {
                     .set(pool.clone())
                     .map_err(|_| anyhow!("set pool failed"))?;
 
-                SQLXPool::new_query(r#"CREATE DATABASE IF NOT EXISTS "postgres""#)
-                    .execute(&pool)
-                    .await?;
                 self.create_tables_for_postgres().await?;
 
                 self.db_driver = DBDriver::Postgres;
@@ -207,6 +205,30 @@ impl SQLXPool {
         }
         Ok(())
     }
+
+    pub async fn postgres_init(&mut self, db_config: &RichIndexerConfig) -> Result<()> {
+        // Connect to the "postgres" database first
+        let mut temp_config = db_config.clone();
+        temp_config.db_name = "postgres".to_string();
+        let uri = build_url_for_postgres(&temp_config);
+        let connection_options =
+            AnyConnectOptions::from_str(&uri)?.log_statements(LevelFilter::Trace);
+        let tmp_pool_options = AnyPoolOptions::new();
+        let pool = tmp_pool_options.connect_with(connection_options).await?;
+        // Check if database exists
+        let query =
+            SQLXPool::new_query(r#"SELECT EXISTS (SELECT FROM pg_database WHERE datname = $1)"#)
+                .bind(db_config.db_name.as_str());
+        let row = query.fetch_one(&pool).await?;
+        // If database does not exist, create it
+        if !row.get::<bool, _>(0) {
+            let query = format!(r#"CREATE DATABASE "{}""#, db_config.db_name);
+            SQLXPool::new_query(&query).execute(&pool).await?;
+            Ok(())
+        } else {
+            Ok(())
+        }
+    }
 }
 
 fn build_url_for_sqlite(db_config: &RichIndexerConfig) -> String {