diff --git a/ai_vdb_provider_postgres.module b/ai_vdb_provider_postgres.module
index f7c6333ab7f43ad07fd5da3d34e2497c5a02839f..c4bda5e772175ea4f1361aefc44d7e844466100b 100644
--- a/ai_vdb_provider_postgres.module
+++ b/ai_vdb_provider_postgres.module
@@ -3,6 +3,7 @@
 use Drupal\ai_search\Plugin\search_api\backend\SearchApiAiSearchBackend;
 use Drupal\Core\Field\BaseFieldDefinition;
 use Drupal\search_api\IndexInterface;
+use Drupal\search_api\Processor\ProcessorPropertyInterface;
 
 /**
  * Implements hook_search_api_index_update().
@@ -32,16 +33,20 @@ function ai_vdb_provider_postgres_search_api_index_update(IndexInterface $index)
 }
 
 function ai_vdb_provider_postgres_is_field_multiple($field) {
-    $field_definition = $field->getDataDefinition()->getFieldDefinition();
-    if ($field_definition instanceof BaseFieldDefinition) {
-      $field_cardinality = $field_definition->getCardinality();
-    }
-    else {
-      $field_cardinality =
-        $field_definition->get('fieldStorage')->getCardinality();
-    }
-    if ($field_cardinality === 1) {
-      return FALSE;
-    }
-    return TRUE;
+  $data_definition = $field->getDataDefinition();
+  if ($data_definition instanceof ProcessorPropertyInterface) {
+    return FALSE;
+  }
+  $field_definition = $data_definition->getFieldDefinition();
+  if ($field_definition instanceof BaseFieldDefinition) {
+    $field_cardinality = $field_definition->getCardinality();
+  }
+  else {
+    $field_cardinality =
+      $field_definition->get('fieldStorage')->getCardinality();
+  }
+  if ($field_cardinality === 1) {
+    return FALSE;
+  }
+  return TRUE;
 }
diff --git a/src/PostgresPgvectorClient.php b/src/PostgresPgvectorClient.php
index 9929aeb0c0a4a14f948a28bfa5678b17938618d2..5869ed0317ca947419fcea06c31d6cb328d287be 100644
--- a/src/PostgresPgvectorClient.php
+++ b/src/PostgresPgvectorClient.php
@@ -535,9 +535,9 @@ class PostgresPgvectorClient {
 
   protected function prepareRelationQuery($collection_name, $field_name, $field_data, $connection) {
     $query = '';
-    $escaped_collection_name_id_sequence = $this->escapeIdentifierForSql(
-      identifier_to_escape: "{$collection_name}_id_seq",
-      connection: $connection,
+    $escaped_collection_name_id_sequence = $this->escapeStringForSql(
+      "{$collection_name}_id_seq",
+      $connection,
     );
     // Prepare entries for relation table.
     $relation_table_fields = [];
@@ -549,21 +549,17 @@ class PostgresPgvectorClient {
       if (empty($value)) {
         continue;
       }
-      $relation_table_fields[$escaped_relation_table_name][] = $value;
+      $relation_table_fields[$escaped_relation_table_name][] = $this->escapeStringForSql($value, $connection);
     }
 
     foreach ($relation_table_fields as $escaped_relation_table_name => $field_values) {
-      $query .= "INSERT INTO {$escaped_relation_table_name} (value, chunk_id) values ";
-      $last_value = end($field_values);
-      foreach ($field_values as $field_value) {
-        $query .= "({$field_value}, currval('{$escaped_collection_name_id_sequence}'))";
-        if ($field_value === $last_value) {
-          $query .= ';';
-        }
-        else {
-          $query .= ",";
-        }
+      if (empty($field_values)) {
+        continue;
       }
+      $query .= "INSERT INTO {$escaped_relation_table_name} (value, chunk_id) VALUES \n";
+      $query .= implode(",\n", array_map(static function ($field_value) use ($escaped_collection_name_id_sequence) {
+        return "({$field_value}, CURRVAL({$escaped_collection_name_id_sequence}))";
+      }, $field_values));
     }
     return $query;
   }
