This is an automated email from the ASF dual-hosted git repository.

lidavidm pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-adbc.git


The following commit(s) were added to refs/heads/main by this push:
     new 223664fee feat(c/driver/postgresql): add `POSTGRESQL:type` metadata 
(#4687)
223664fee is described below

commit 223664fee10b702591378f6b3316452e8ed22a3b
Author: David Li <[email protected]>
AuthorDate: Fri Aug 21 09:56:24 2026 +0900

    feat(c/driver/postgresql): add `POSTGRESQL:type` metadata (#4687)
    
    Closes #4461.
    
    Assisted-by: GPT-5.6 Sol <[email protected]>
---
 c/driver/postgresql/postgres_type.h                | 18 ++++++++++++++++++
 c/driver/postgresql/postgres_type_test.cc          | 15 +++++++++++++++
 c/driver/postgresql/result_reader.cc               |  3 +--
 .../queries-cockroachdb/type/bind/int32.txtcase    | 15 ++++-----------
 .../queries-cockroachdb/type/literal/int32.txtcase | 13 ++-----------
 .../queries-cockroachdb/type/select/int32.txtcase  | 22 +++++++++++-----------
 .../type/select/json.txtcase}                      |  4 ++--
 .../type/bind/large_string.txtcase}                |  4 ++--
 .../type/bind/string.txtcase}                      |  4 ++--
 .../type/bind/string_view.txtcase}                 |  4 ++--
 .../queries-cratedb/type/bind/timestamp_ms.txtcase |  1 +
 .../queries-cratedb/type/bind/timestamp_ns.txtcase |  1 +
 .../queries-cratedb/type/bind/timestamp_s.txtcase  |  1 +
 .../queries-cratedb/type/bind/timestamp_us.txtcase |  1 +
 .../type/literal/string.txtcase}                   |  4 ++--
 .../type/select/string.txtcase}                    |  4 ++--
 .../ingest/{time_s.txtcase => binary.txtcase}      |  4 ++--
 .../ingest/{time_s.txtcase => binary_view.txtcase} |  4 ++--
 .../ingest/{time_s.txtcase => boolean.txtcase}     |  4 ++--
 .../ingest/{time_s.txtcase => date.txtcase}        |  4 ++--
 .../validation/queries/ingest/decimal.txtcase      |  5 +++++
 .../ingest/decimal_scale_equals_precision.txtcase  |  5 +++++
 .../queries/ingest/decimal_scale_negative.txtcase  |  5 +++++
 .../queries/ingest/decimal_scale_zero.txtcase      |  5 +++++
 .../{time_s.txtcase => fixed_size_binary.txtcase}  |  4 ++--
 .../ingest/{time_s.txtcase => float32.txtcase}     |  4 ++--
 .../ingest/{time_s.txtcase => float64.txtcase}     |  4 ++--
 .../ingest/{time_s.txtcase => int16.txtcase}       |  4 ++--
 .../ingest/{time_s.txtcase => int32.txtcase}       |  4 ++--
 .../ingest/{time_s.txtcase => int64.txtcase}       |  4 ++--
 .../{time_s.txtcase => large_binary.txtcase}       |  4 ++--
 .../{time_s.txtcase => large_string.txtcase}       |  4 ++--
 .../ingest/{time_s.txtcase => string.txtcase}      |  4 ++--
 .../ingest/{time_s.txtcase => string_view.txtcase} |  4 ++--
 .../validation/queries/ingest/time_ms.txtcase      |  3 +++
 .../validation/queries/ingest/time_ns.txtcase      |  3 +++
 .../validation/queries/ingest/time_s.txtcase       |  3 +++
 .../ingest/{time_s.txtcase => time_us.txtcase}     |  4 ++--
 .../validation/queries/ingest/timestamp_ms.txtcase |  5 +++++
 .../validation/queries/ingest/timestamp_ns.txtcase |  5 +++++
 .../validation/queries/ingest/timestamp_s.txtcase  |  5 +++++
 .../{time_s.txtcase => timestamp_us.txtcase}       |  4 ++--
 .../queries/ingest/timestamptz_ms.txtcase          |  5 +++++
 .../queries/ingest/timestamptz_ns.txtcase          |  5 +++++
 .../queries/ingest/timestamptz_s.txtcase           |  5 +++++
 .../{time_s.txtcase => timestamptz_us.txtcase}     |  4 ++--
 .../validation/queries/ingest/uuid.txtcase         |  1 +
 .../validation/queries/type/bind/binary.bind.sql   |  1 -
 .../validation/queries/type/bind/binary.setup.sql  |  3 ---
 .../type/bind/binary.txtcase}                      | 11 +++++++----
 .../queries/type/bind/binary_view.setup.sql        |  3 ---
 .../type/bind/binary_view.txtcase}                 |  7 +++----
 .../time_s.txtcase => type/bind/boolean.txtcase}   |  4 ++--
 .../time_s.txtcase => type/bind/date.txtcase}      |  4 ++--
 .../validation/queries/type/bind/decimal.txtcase   |  5 +++++
 .../queries/type/bind/fixed_size_binary.setup.sql  |  3 ---
 .../type/bind/fixed_size_binary.txtcase}           |  7 +++----
 .../time_s.txtcase => type/bind/float16.txtcase}   |  5 +++--
 .../time_s.txtcase => type/bind/float32.txtcase}   |  5 +++--
 .../time_s.txtcase => type/bind/float64.txtcase}   |  5 +++--
 .../time_s.txtcase => type/bind/int16.txtcase}     |  5 +++--
 .../time_s.txtcase => type/bind/int32.txtcase}     |  5 +++--
 .../time_s.txtcase => type/bind/int64.txtcase}     |  5 +++--
 .../queries/type/bind/large_binary.setup.sql       |  3 ---
 .../type/bind/large_binary.txtcase}                |  7 +++----
 .../queries/type/bind/large_string.setup.sql       |  3 ---
 .../type/bind/large_string.txtcase}                |  7 +++----
 .../validation/queries/type/bind/string.setup.sql  |  3 ---
 .../type/bind/string.txtcase}                      |  7 +++----
 .../queries/type/bind/string_view.setup.sql        |  3 ---
 .../type/bind/string_view.txtcase}                 |  7 +++----
 .../time_s.txtcase => type/bind/time_us.txtcase}   |  4 ++--
 .../queries/type/bind/timestamp_ms.txtcase         |  4 ++++
 .../queries/type/bind/timestamp_ns.txtcase         |  4 ++++
 .../queries/type/bind/timestamp_s.txtcase          |  4 ++++
 .../bind/timestamp_us.txtcase}                     |  4 ++--
 .../queries/type/bind/timestamptz_ms.txtcase       |  4 ++++
 .../queries/type/bind/timestamptz_ns.txtcase       |  4 ++++
 .../queries/type/bind/timestamptz_s.txtcase        |  4 ++++
 .../bind/timestamptz_us.txtcase}                   |  4 ++--
 .../validation/queries/type/bind/uuid.txtcase      |  2 +-
 .../validation/queries/type/literal/binary.sql     |  1 -
 .../type/literal/binary.txtcase}                   |  9 +++------
 .../literal/boolean.txtcase}                       |  4 ++--
 .../time_s.txtcase => type/literal/date.txtcase}   |  4 ++--
 .../queries/type/literal/decimal.schema.json       | 14 --------------
 .../queries/type/{bind => literal}/decimal.txtcase |  6 ++++++
 .../literal/float32.txtcase}                       |  5 +++--
 .../literal/float64.txtcase}                       |  5 +++--
 .../time_s.txtcase => type/literal/int16.txtcase}  |  5 +++--
 .../time_s.txtcase => type/literal/int32.txtcase}  |  5 +++--
 .../time_s.txtcase => type/literal/int64.txtcase}  |  5 +++--
 .../time_s.txtcase => type/literal/string.txtcase} |  4 ++--
 .../time_s.txtcase => type/literal/time.txtcase}   |  4 ++--
 .../literal/timestamp.txtcase}                     |  4 ++--
 .../literal/timestamptz.txtcase}                   |  4 ++--
 .../validation/queries/type/literal/uuid.txtcase   |  2 +-
 .../queries/type/select/binary.setup.sql           | 10 ----------
 .../type/select/binary.txtcase}                    | 20 +++++++++-----------
 .../time_s.txtcase => type/select/boolean.txtcase} |  4 ++--
 .../time_s.txtcase => type/select/date.txtcase}    |  4 ++--
 .../queries/type/select/decimal.schema.json        | 14 --------------
 .../queries/type/{bind => select}/decimal.txtcase  |  6 ++++++
 .../time_s.txtcase => type/select/float32.txtcase} |  5 +++--
 .../time_s.txtcase => type/select/float64.txtcase} |  5 +++--
 .../time_s.txtcase => type/select/int16.txtcase}   |  5 +++--
 .../time_s.txtcase => type/select/int32.txtcase}   |  5 +++--
 .../time_s.txtcase => type/select/int64.txtcase}   |  5 +++--
 .../validation/queries/type/select/json.txtcase    |  2 +-
 .../validation/queries/type/select/jsonb.txtcase   |  2 +-
 .../queries/type/select/string.setup.sql           | 10 ----------
 .../type/select/string.txtcase}                    | 20 +++++++++-----------
 .../time_s.txtcase => type/select/time.txtcase}    |  4 ++--
 .../select/timestamp.txtcase}                      |  4 ++--
 .../select/timestamptz.txtcase}                    |  4 ++--
 .../validation/queries/type/select/uuid.txtcase    |  2 +-
 c/driver/postgresql/validation/tests/postgresql.py |  1 +
 .../python/recipe/postgresql_execute_nocopy.py     | 12 ++++++++++++
 .../recipe/postgresql_execute_nocopy.py.stdout.txt | 12 ++++++++++++
 119 files changed, 358 insertions(+), 277 deletions(-)

diff --git a/c/driver/postgresql/postgres_type.h 
b/c/driver/postgresql/postgres_type.h
index ed27f5ba1..178980508 100644
--- a/c/driver/postgresql/postgres_type.h
+++ b/c/driver/postgresql/postgres_type.h
@@ -354,6 +354,11 @@ class PostgresType {
         break;
     }
 
+    // Don't add POSTGRESQL:type to top-level field (which is the schema)
+    if (type_id_ != PostgresTypeId::kRecord || !field_name_.empty()) {
+      NANOARROW_RETURN_NOT_OK(AddTypeMetadata(schema));
+    }
+
     NANOARROW_RETURN_NOT_OK(ArrowSchemaSetName(schema, field_name_.c_str()));
     return NANOARROW_OK;
   }
@@ -370,12 +375,25 @@ class PostgresType {
   std::vector<PostgresType> children_;
 
   static constexpr const char* kPostgresTypeKey = "ADBC:postgresql:typname";
+  static constexpr const char* kTypeKey = "POSTGRESQL:type";
   static constexpr const char* kExtensionName = "ARROW:extension:name";
   static constexpr const char* kOpaqueExtensionName = "arrow.opaque";
   static constexpr const char* kJsonExtensionName = "arrow.json";
   static constexpr const char* kUuidExtensionName = "arrow.uuid";
   static constexpr const char* kExtensionMetadata = "ARROW:extension:metadata";
 
+  ArrowErrorCode AddTypeMetadata(ArrowSchema* schema) const {
+    const char* typname =
+        !typname_.empty() ? typname_.c_str() : PostgresTypname(type_id_);
+    nanoarrow::UniqueBuffer buffer;
+    NANOARROW_RETURN_NOT_OK(ArrowMetadataBuilderInit(buffer.get(), 
schema->metadata));
+    NANOARROW_RETURN_NOT_OK(ArrowMetadataBuilderAppend(
+        buffer.get(), ArrowCharView(kTypeKey), ArrowCharView(typname)));
+    NANOARROW_RETURN_NOT_OK(
+        ArrowSchemaSetMetadata(schema, reinterpret_cast<char*>(buffer->data)));
+    return NANOARROW_OK;
+  }
+
   ArrowErrorCode AddPostgresTypeMetadata(ArrowSchema* schema,
                                          const std::string& vendor_name) const 
{
     // the typname_ may not always be set: an instance of this class can be
diff --git a/c/driver/postgresql/postgres_type_test.cc 
b/c/driver/postgresql/postgres_type_test.cc
index 9ef74b969..ac80f11df 100644
--- a/c/driver/postgresql/postgres_type_test.cc
+++ b/c/driver/postgresql/postgres_type_test.cc
@@ -221,6 +221,11 @@ TEST(PostgresTypeTest, PostgresTypeSetSchema) {
                         &typnameMetadataValue);
   EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
             "numeric");
+  typnameMetadataValue = ArrowCharView("<not found>");
+  ArrowMetadataGetValue(schema->metadata, ArrowCharView("POSTGRESQL:type"),
+                        &typnameMetadataValue);
+  EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
+            "numeric");
   ArrowMetadataGetValue(schema->metadata, 
ArrowCharView("ARROW:extension:name"),
                         &typnameMetadataValue);
   EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
@@ -241,6 +246,11 @@ TEST(PostgresTypeTest, PostgresTypeSetSchema) {
                         ArrowCharView("ADBC:postgresql:typname"), 
&typnameMetadataValue);
   EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
             "numeric");
+  typnameMetadataValue = ArrowCharView("<not found>");
+  ArrowMetadataGetValue(schema->children[0]->metadata, 
ArrowCharView("POSTGRESQL:type"),
+                        &typnameMetadataValue);
+  EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
+            "numeric");
   schema.reset();
 
   ArrowSchemaInit(schema.get());
@@ -267,6 +277,11 @@ TEST(PostgresTypeTest, PostgresTypeSetSchema) {
                         &typnameMetadataValue);
   EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
             "some_name");
+  typnameMetadataValue = ArrowCharView("<not found>");
+  ArrowMetadataGetValue(schema->metadata, ArrowCharView("POSTGRESQL:type"),
+                        &typnameMetadataValue);
+  EXPECT_EQ(std::string(typnameMetadataValue.data, 
typnameMetadataValue.size_bytes),
+            "some_name");
   schema.reset();
 }
 
diff --git a/c/driver/postgresql/result_reader.cc 
b/c/driver/postgresql/result_reader.cc
index 6552270c7..b44dba3d8 100644
--- a/c/driver/postgresql/result_reader.cc
+++ b/c/driver/postgresql/result_reader.cc
@@ -203,9 +203,8 @@ Status PqResultArrayReader::Initialize(int64_t* 
rows_affected) {
     UNWRAP_ERRNO(Internal,
                  type_resolver_->FindWithDefault(helper_.FieldType(i), 
&child_type));
 
+    child_type = child_type.WithFieldName(helper_.FieldName(i));
     UNWRAP_ERRNO(Internal, child_type.SetSchema(schema_->children[i], 
vendor_name_));
-    UNWRAP_ERRNO(Internal,
-                 ArrowSchemaSetName(schema_->children[i], 
helper_.FieldName(i)));
 
     std::unique_ptr<PostgresCopyFieldReader> child_reader;
     UNWRAP_NANOARROW(
diff --git 
a/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase 
b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
index 6087a8309..9c47a2360 100644
--- a/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
+++ b/c/driver/postgresql/validation/queries-cockroachdb/type/bind/int32.txtcase
@@ -15,15 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// part: expected_schema
+// part: setup_query
 
-{
-    "format": "+s",
-    "children": [
-        {
-            "name": "res",
-            "format": "l",
-            "flags": ["nullable"]
-        }
-    ]
-}
+CREATE TABLE test_int32 (
+    res INT4
+);
diff --git 
a/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase 
b/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
index 6087a8309..324276f9d 100644
--- 
a/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cockroachdb/type/literal/int32.txtcase
@@ -15,15 +15,6 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// part: expected_schema
+// part: query
 
-{
-    "format": "+s",
-    "children": [
-        {
-            "name": "res",
-            "format": "l",
-            "flags": ["nullable"]
-        }
-    ]
-}
+SELECT CAST(131072 AS INT4) AS res
diff --git 
a/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase 
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
index 6087a8309..71b43b3de 100644
--- 
a/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/int32.txtcase
@@ -15,15 +15,15 @@
 // specific language governing permissions and limitations
 // under the License.
 
-// part: expected_schema
+// part: setup_query
 
-{
-    "format": "+s",
-    "children": [
-        {
-            "name": "res",
-            "format": "l",
-            "flags": ["nullable"]
-        }
-    ]
-}
+CREATE TABLE test_int32 (
+    idx INTEGER,
+    res INT4
+);
+
+INSERT INTO test_int32 (idx, res) VALUES (1, 131072);
+INSERT INTO test_int32 (idx, res) VALUES (2, 2147483647);
+INSERT INTO test_int32 (idx, res) VALUES (3, -2147483648);
+INSERT INTO test_int32 (idx, res) VALUES (4, 0);
+INSERT INTO test_int32 (idx, res) VALUES (5, NULL);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/json.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to 
c/driver/postgresql/validation/queries-cockroachdb/type/select/json.txtcase
index 30dfb7d9b..c5328e7af 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cockroachdb/type/select/json.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "jsonb"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/large_string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to 
c/driver/postgresql/validation/queries-cratedb/type/bind/large_string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/large_string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries-cratedb/type/bind/string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/bind/string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/string_view.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to 
c/driver/postgresql/validation/queries-cratedb/type/bind/string_view.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/string_view.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
index d2943d938..248dbc5c3 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ms.txtcase
@@ -19,6 +19,7 @@
 
 [tags]
 sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
 
 // part: setup_query
 
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
index 355d169e7..25663c724 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
@@ -19,6 +19,7 @@
 
 [tags]
 sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
 
 // part: setup_query
 
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
index d2943d938..248dbc5c3 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
@@ -19,6 +19,7 @@
 
 [tags]
 sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
 
 // part: setup_query
 
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
index c08fab0eb..2a859ef17 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
+++ 
b/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_us.txtcase
@@ -19,6 +19,7 @@
 
 [tags]
 sql-type-name = "TIMESTAMP"
+field-type-name = "timestamp"
 
 // part: setup_query
 
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/literal/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to 
c/driver/postgresql/validation/queries-cratedb/type/literal/string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/literal/string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries-cratedb/type/select/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to 
c/driver/postgresql/validation/queries-cratedb/type/select/string.txtcase
index 30dfb7d9b..c74419479 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries-cratedb/type/select/string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "varchar"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/binary.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/binary.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/binary.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/binary_view.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/binary_view.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/binary_view.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/boolean.txtcase
index 30dfb7d9b..c849ef620 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/boolean.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/date.txtcase
index 30dfb7d9b..0e2a6071f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/date.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "date"
diff --git a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase 
b/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
index 7b21a0b79..4312be00c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/decimal.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
 // part: expected_schema
 {
     "format": "+s",
diff --git 
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
 
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
index cf39915ed..12f8632af 100644
--- 
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
+++ 
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_equals_precision.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
 // part: expected_schema
 
 {
diff --git 
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase 
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
index a965a58e5..f783bb557 100644
--- 
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
+++ 
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_negative.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
 // part: expected_schema
 
 {
diff --git 
a/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase 
b/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
index 31621a79c..651ffa85c 100644
--- a/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/decimal_scale_zero.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "numeric"
+
 // part: expected_schema
 
 {
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/fixed_size_binary.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/fixed_size_binary.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/fixed_size_binary.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/float32.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/float32.txtcase
index 30dfb7d9b..8ccc6a974 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/float32.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/float64.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/float64.txtcase
index 30dfb7d9b..b77655eeb 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/float64.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/int16.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/int16.txtcase
index 30dfb7d9b..bdba91e6d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/int16.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/int32.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/int32.txtcase
index 30dfb7d9b..a15424c49 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/int32.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/int64.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/int64.txtcase
index 30dfb7d9b..10fd0c302 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/int64.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "int8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/large_binary.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/large_binary.txtcase
index 30dfb7d9b..e58c36160 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/large_binary.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "bytea"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/large_string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/large_string.txtcase
index 30dfb7d9b..03a7323b3 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/large_string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/string.txtcase
index 30dfb7d9b..03a7323b3 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/string_view.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/string_view.txtcase
index 30dfb7d9b..03a7323b3 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/string_view.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase 
b/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
index 30dfb7d9b..5ee360e82 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_ms.txtcase
@@ -19,3 +19,6 @@
 // part: metadata
 
 skip = "COPY Writer not implemented"
+
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase 
b/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
index 30dfb7d9b..5ee360e82 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_ns.txtcase
@@ -19,3 +19,6 @@
 // part: metadata
 
 skip = "COPY Writer not implemented"
+
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
index 30dfb7d9b..5ee360e82 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
@@ -19,3 +19,6 @@
 // part: metadata
 
 skip = "COPY Writer not implemented"
+
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/time_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/time_us.txtcase
index 30dfb7d9b..eb2400eaf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/time_us.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
index 5ce7f358b..c835b728e 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_ms.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "timestamp"
+
 
 // part: expected_schema
 
diff --git a/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
index ae5d1af24..163298f2a 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_ns.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "timestamp"
+
 
 // part: expected_schema
 
diff --git a/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
index 0982b82c3..36f737514 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_s.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "timestamp"
+
 
 // part: expected_schema
 
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamp_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/timestamp_us.txtcase
index 30dfb7d9b..fe02100c2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamp_us.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "timestamp"
diff --git 
a/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
index 81ce61315..2c1c5dc47 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_ms.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "timestamptz"
+
 
 // part: expected_schema
 
diff --git 
a/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
index 12e8ed264..3736a5aa3 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_ns.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "timestamptz"
+
 
 
 // part: expected_schema
diff --git 
a/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
index 9d2580d92..cbc469bb1 100644
--- a/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_s.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+field-type-name = "timestamptz"
+
 
 // part: expected_schema
 
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/ingest/timestamptz_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/ingest/timestamptz_us.txtcase
index 30dfb7d9b..ed7e1a725 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/timestamptz_us.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+field-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/ingest/uuid.txtcase 
b/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
index 5dc1f4bff..32b2fe237 100644
--- a/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/ingest/uuid.txtcase
@@ -19,6 +19,7 @@
 
 [tags]
 sql-type-name = "UUID"
+field-type-name = "uuid"
 
 // part: input_schema
 
diff --git a/c/driver/postgresql/validation/queries/type/bind/binary.bind.sql 
b/c/driver/postgresql/validation/queries/type/bind/binary.bind.sql
deleted file mode 100644
index 24151ef0e..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/binary.bind.sql
+++ /dev/null
@@ -1 +0,0 @@
-INSERT INTO test_binary (res) VALUES ($1)
diff --git a/c/driver/postgresql/validation/queries/type/bind/binary.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/binary.setup.sql
deleted file mode 100644
index 228cde867..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/binary.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_binary (
-    res BYTEA
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/binary.txtcase
similarity index 86%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/binary.txtcase
index d2943d938..d468b2ce9 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/binary.txtcase
@@ -18,11 +18,14 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_binary (
+    res BYTEA
 );
+
+// part: bind_query
+
+INSERT INTO test_binary (res) VALUES ($1)
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/binary_view.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/binary_view.setup.sql
deleted file mode 100644
index 0f9cb3f0e..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/binary_view.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_binary_view (
-    res BYTEA
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/binary_view.txtcase
similarity index 90%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/binary_view.txtcase
index d2943d938..ee73b32d1 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/binary_view.txtcase
@@ -18,11 +18,10 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_binary_view (
+    res BYTEA
 );
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/boolean.txtcase
index 30dfb7d9b..18cfc74f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/boolean.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/date.txtcase
index 30dfb7d9b..3c1f0a5bf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/date.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "date"
diff --git a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
index aac33f269..3724e2737 100644
--- a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
@@ -15,6 +15,11 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "numeric"
+
 // part: expected_schema
 {
     "format": "+s",
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.setup.sql
deleted file mode 100644
index 468c8cc65..000000000
--- 
a/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_fixed_size_binary (
-    res BYTEA
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.txtcase
similarity index 90%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to 
c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.txtcase
index d2943d938..8135e53d3 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/fixed_size_binary.txtcase
@@ -18,11 +18,10 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_fixed_size_binary (
+    res BYTEA
 );
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/float16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/float16.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/float16.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/float32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/float32.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/float32.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/float64.txtcase
similarity index 92%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/float64.txtcase
index 30dfb7d9b..5470d6a26 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/float64.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "double precision"
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/int16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/int16.txtcase
index 30dfb7d9b..c2e649874 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/int16.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "smallint"
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/int32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/int32.txtcase
index 30dfb7d9b..2200c181f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/int32.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "integer"
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/int64.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/int64.txtcase
index 30dfb7d9b..b04c4e9b1 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/int64.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bigint"
+field-type-name = "int8"
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/large_binary.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/large_binary.setup.sql
deleted file mode 100644
index bbc3b3385..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/large_binary.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_large_binary (
-    res BYTEA
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/large_binary.txtcase
similarity index 90%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/large_binary.txtcase
index d2943d938..c28131321 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/large_binary.txtcase
@@ -18,11 +18,10 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_large_binary (
+    res BYTEA
 );
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/large_string.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/large_string.setup.sql
deleted file mode 100644
index d3aaa565e..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/large_string.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_large_string (
-    res TEXT
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/large_string.txtcase
similarity index 90%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/large_string.txtcase
index d2943d938..1d33d24e1 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/large_string.txtcase
@@ -18,11 +18,10 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_large_string (
+    res TEXT
 );
diff --git a/c/driver/postgresql/validation/queries/type/bind/string.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/string.setup.sql
deleted file mode 100644
index d77bdb858..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/string.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_string (
-    res TEXT
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/string.txtcase
similarity index 90%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/string.txtcase
index d2943d938..dc6d769b3 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/string.txtcase
@@ -18,11 +18,10 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_string (
+    res TEXT
 );
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/string_view.setup.sql 
b/c/driver/postgresql/validation/queries/type/bind/string_view.setup.sql
deleted file mode 100644
index 97c767c1a..000000000
--- a/c/driver/postgresql/validation/queries/type/bind/string_view.setup.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-CREATE TABLE test_string_view (
-    res TEXT
-);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/string_view.txtcase
similarity index 90%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/string_view.txtcase
index d2943d938..86afa2085 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/string_view.txtcase
@@ -18,11 +18,10 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_string_view (
+    res TEXT
 );
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/time_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/time_us.txtcase
index 30dfb7d9b..c562b8b94 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/time_us.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "time"
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
index 9c8ea8378..355fa92c0 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_ms.txtcase
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "timestamp"
 
 // part: expected_schema
 
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
index 61832e3fa..aa1dd9435 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_ns.txtcase
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "timestamp"
 
 // part: expected_schema
 
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
index d3ef94a03..a5ca5f036 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_s.txtcase
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "timestamp"
 
 // part: expected_schema
 
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamp_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/timestamp_us.txtcase
index 30dfb7d9b..1e61d7e2f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamp_us.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamp"
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
index 53fee0306..69f09e022 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ms.txtcase
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "timestamptz"
 
 // part: expected_schema
 
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
index 19129c5e1..f58117b59 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_ns.txtcase
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "timestamptz"
 
 // part: expected_schema
 
diff --git 
a/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
index f506ac409..a9b9e50a7 100644
--- a/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_s.txtcase
@@ -15,6 +15,10 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "timestamptz"
 
 // part: expected_schema
 
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/timestamptz_us.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/bind/timestamptz_us.txtcase
index 30dfb7d9b..14042aa2d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/timestamptz_us.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase 
b/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
index a6f7259c8..82151dd53 100644
--- a/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/type/bind/uuid.txtcase
@@ -21,7 +21,7 @@
 drop = "test_uuid"
 
 [tags]
-sql-type-name = "UUID"
+sql-type-name = "uuid"
 
 // part: setup_query
 
diff --git a/c/driver/postgresql/validation/queries/type/literal/binary.sql 
b/c/driver/postgresql/validation/queries/type/literal/binary.sql
deleted file mode 100644
index c00c25a6c..000000000
--- a/c/driver/postgresql/validation/queries/type/literal/binary.sql
+++ /dev/null
@@ -1 +0,0 @@
-SELECT decode('e38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81', 'hex') 
AS res
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/binary.txtcase
similarity index 86%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/binary.txtcase
index d2943d938..35b280e90 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/binary.txtcase
@@ -18,11 +18,8 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
 
-// part: setup_query
+// part: query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
-);
+SELECT decode('e38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81', 'hex') 
AS res
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/boolean.txtcase
index 30dfb7d9b..18cfc74f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/boolean.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/date.txtcase
index 30dfb7d9b..3c1f0a5bf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/date.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "date"
diff --git 
a/c/driver/postgresql/validation/queries/type/literal/decimal.schema.json 
b/c/driver/postgresql/validation/queries/type/literal/decimal.schema.json
deleted file mode 100644
index 8cc1d06df..000000000
--- a/c/driver/postgresql/validation/queries/type/literal/decimal.schema.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "format": "+s",
-    "children": [
-        {
-            "name": "res",
-            "format": "u",
-            "flags": ["nullable"],
-            "metadata": {
-                "ARROW:extension:name": "arrow.opaque",
-                "ARROW:extension:metadata": "{\"type_name\": \"numeric\", 
\"vendor_name\": \"PostgreSQL\"}"
-            }
-        }
-    ]
-}
diff --git a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/decimal.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/decimal.txtcase
index aac33f269..87871c746 100644
--- a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/decimal.txtcase
@@ -15,7 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "numeric"
+
 // part: expected_schema
+
 {
     "format": "+s",
     "children": [
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/float32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/float32.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/float32.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/float64.txtcase
similarity index 92%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/float64.txtcase
index 30dfb7d9b..5470d6a26 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/float64.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "double precision"
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/int16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/int16.txtcase
index 30dfb7d9b..c2e649874 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/int16.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "smallint"
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/int32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/int32.txtcase
index 30dfb7d9b..2200c181f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/int32.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "integer"
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/int64.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/int64.txtcase
index 30dfb7d9b..b04c4e9b1 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/int64.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bigint"
+field-type-name = "int8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/string.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/string.txtcase
index 30dfb7d9b..4b4408fd8 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/string.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "text"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/time.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/time.txtcase
index 30dfb7d9b..c562b8b94 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/time.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/timestamp.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/timestamp.txtcase
index 30dfb7d9b..1e61d7e2f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/timestamp.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamp"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/timestamptz.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/literal/timestamptz.txtcase
index 30dfb7d9b..14042aa2d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/timestamptz.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase 
b/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
index b2dfe170f..ca71d8114 100644
--- a/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/type/literal/uuid.txtcase
@@ -18,7 +18,7 @@
 // part: metadata
 
 [tags]
-sql-type-name = "UUID"
+sql-type-name = "uuid"
 
 // part: query
 
diff --git 
a/c/driver/postgresql/validation/queries/type/select/binary.setup.sql 
b/c/driver/postgresql/validation/queries/type/select/binary.setup.sql
deleted file mode 100644
index 070b84a85..000000000
--- a/c/driver/postgresql/validation/queries/type/select/binary.setup.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE test_binary (
-    idx INTEGER,
-    res BYTEA
-);
-
-INSERT INTO test_binary (idx, res) VALUES (1, 
E'\\xe38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81');  -- 'こんにちは、世界!' 
in UTF-8
-INSERT INTO test_binary (idx, res) VALUES (2, E'\\x00');
-INSERT INTO test_binary (idx, res) VALUES (3, E'\\xdeadbeef');
-INSERT INTO test_binary (idx, res) VALUES (4, E'\\x');
-INSERT INTO test_binary (idx, res) VALUES (5, NULL);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase 
b/c/driver/postgresql/validation/queries/type/select/binary.txtcase
similarity index 64%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
copy to c/driver/postgresql/validation/queries/type/select/binary.txtcase
index 355d169e7..5df919389 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/binary.txtcase
@@ -18,19 +18,17 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "bytea"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_binary (
+    idx INTEGER,
+    res BYTEA
 );
 
-// part: expected
-
-{"res": null}
-{"res": -9223372036854000}
-{"res": 946684800000000}
-{"res": 1684158330000000}
-{"res": 9223372036854000}
+INSERT INTO test_binary (idx, res) VALUES (1, 
E'\\xe38193e38293e381abe381a1e381afe38081e4b896e7958cefbc81');  -- 'こんにちは、世界!' 
in UTF-8
+INSERT INTO test_binary (idx, res) VALUES (2, E'\\x00');
+INSERT INTO test_binary (idx, res) VALUES (3, E'\\xdeadbeef');
+INSERT INTO test_binary (idx, res) VALUES (4, E'\\x');
+INSERT INTO test_binary (idx, res) VALUES (5, NULL);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/boolean.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/boolean.txtcase
index 30dfb7d9b..18cfc74f2 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/boolean.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bool"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/date.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/date.txtcase
index 30dfb7d9b..3c1f0a5bf 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/date.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "date"
diff --git 
a/c/driver/postgresql/validation/queries/type/select/decimal.schema.json 
b/c/driver/postgresql/validation/queries/type/select/decimal.schema.json
deleted file mode 100644
index 8cc1d06df..000000000
--- a/c/driver/postgresql/validation/queries/type/select/decimal.schema.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-    "format": "+s",
-    "children": [
-        {
-            "name": "res",
-            "format": "u",
-            "flags": ["nullable"],
-            "metadata": {
-                "ARROW:extension:name": "arrow.opaque",
-                "ARROW:extension:metadata": "{\"type_name\": \"numeric\", 
\"vendor_name\": \"PostgreSQL\"}"
-            }
-        }
-    ]
-}
diff --git a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase 
b/c/driver/postgresql/validation/queries/type/select/decimal.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
copy to c/driver/postgresql/validation/queries/type/select/decimal.txtcase
index aac33f269..87871c746 100644
--- a/c/driver/postgresql/validation/queries/type/bind/decimal.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/decimal.txtcase
@@ -15,7 +15,13 @@
 // specific language governing permissions and limitations
 // under the License.
 
+// part: metadata
+
+[tags]
+sql-type-name = "numeric"
+
 // part: expected_schema
+
 {
     "format": "+s",
     "children": [
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/float32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/float32.txtcase
index 30dfb7d9b..2fffddb1d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/float32.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "real"
+field-type-name = "float4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/float64.txtcase
similarity index 92%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/float64.txtcase
index 30dfb7d9b..5470d6a26 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/float64.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "double precision"
+field-type-name = "float8"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/int16.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/int16.txtcase
index 30dfb7d9b..c2e649874 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/int16.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "smallint"
+field-type-name = "int2"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/int32.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/int32.txtcase
index 30dfb7d9b..2200c181f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/int32.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "integer"
+field-type-name = "int4"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/int64.txtcase
similarity index 93%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/int64.txtcase
index 30dfb7d9b..b04c4e9b1 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/int64.txtcase
@@ -15,7 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "bigint"
+field-type-name = "int8"
diff --git a/c/driver/postgresql/validation/queries/type/select/json.txtcase 
b/c/driver/postgresql/validation/queries/type/select/json.txtcase
index 533652129..ca8723580 100644
--- a/c/driver/postgresql/validation/queries/type/select/json.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/json.txtcase
@@ -21,7 +21,7 @@
 drop = "test_json"
 
 [tags]
-sql-type-name = "JSON"
+sql-type-name = "json"
 
 // part: setup_query
 
diff --git a/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase 
b/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
index 167f00e89..26f3ff882 100644
--- a/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/jsonb.txtcase
@@ -21,7 +21,7 @@
 drop = "test_jsonb"
 
 [tags]
-sql-type-name = "JSONB"
+sql-type-name = "jsonb"
 
 // part: setup_query
 
diff --git 
a/c/driver/postgresql/validation/queries/type/select/string.setup.sql 
b/c/driver/postgresql/validation/queries/type/select/string.setup.sql
deleted file mode 100644
index 1a401e65c..000000000
--- a/c/driver/postgresql/validation/queries/type/select/string.setup.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE test_string (
-    idx INTEGER,
-    res TEXT
-);
-
-INSERT INTO test_string (idx, res) VALUES (1, 'hello');
-INSERT INTO test_string (idx, res) VALUES (2, '');
-INSERT INTO test_string (idx, res) VALUES (3, 'Special chars: 
!@#$%^&*()_+{}|:"<>?~`-=[]\;'',./');
-INSERT INTO test_string (idx, res) VALUES (4, 'Unicode: 你好, Привет, こんにちは, 
สวัสดี');
-INSERT INTO test_string (idx, res) VALUES (5, NULL);
diff --git 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase 
b/c/driver/postgresql/validation/queries/type/select/string.txtcase
similarity index 65%
copy from 
c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
copy to c/driver/postgresql/validation/queries/type/select/string.txtcase
index 355d169e7..718a999ba 100644
--- 
a/c/driver/postgresql/validation/queries-cratedb/type/bind/timestamp_ns.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/string.txtcase
@@ -18,19 +18,17 @@
 // part: metadata
 
 [tags]
-sql-type-name = "TIMESTAMP"
+sql-type-name = "text"
 
 // part: setup_query
 
-CREATE TABLE test_timestamp (
-    idx INT,
-    res TIMESTAMP
+CREATE TABLE test_string (
+    idx INTEGER,
+    res TEXT
 );
 
-// part: expected
-
-{"res": null}
-{"res": -9223372036854000}
-{"res": 946684800000000}
-{"res": 1684158330000000}
-{"res": 9223372036854000}
+INSERT INTO test_string (idx, res) VALUES (1, 'hello');
+INSERT INTO test_string (idx, res) VALUES (2, '');
+INSERT INTO test_string (idx, res) VALUES (3, 'Special chars: 
!@#$%^&*()_+{}|:"<>?~`-=[]\;'',./');
+INSERT INTO test_string (idx, res) VALUES (4, 'Unicode: 你好, Привет, こんにちは, 
สวัสดี');
+INSERT INTO test_string (idx, res) VALUES (5, NULL);
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/time.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/time.txtcase
index 30dfb7d9b..c562b8b94 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/time.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "time"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/timestamp.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/timestamp.txtcase
index 30dfb7d9b..1e61d7e2f 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/timestamp.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamp"
diff --git a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase 
b/c/driver/postgresql/validation/queries/type/select/timestamptz.txtcase
similarity index 95%
copy from c/driver/postgresql/validation/queries/ingest/time_s.txtcase
copy to c/driver/postgresql/validation/queries/type/select/timestamptz.txtcase
index 30dfb7d9b..14042aa2d 100644
--- a/c/driver/postgresql/validation/queries/ingest/time_s.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/timestamptz.txtcase
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-
 // part: metadata
 
-skip = "COPY Writer not implemented"
+[tags]
+sql-type-name = "timestamptz"
diff --git a/c/driver/postgresql/validation/queries/type/select/uuid.txtcase 
b/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
index c268fbdfe..2872c55d0 100644
--- a/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
+++ b/c/driver/postgresql/validation/queries/type/select/uuid.txtcase
@@ -21,7 +21,7 @@
 drop = "test_uuid"
 
 [tags]
-sql-type-name = "UUID"
+sql-type-name = "uuid"
 
 // part: setup_query
 
diff --git a/c/driver/postgresql/validation/tests/postgresql.py 
b/c/driver/postgresql/validation/tests/postgresql.py
index 8999c5393..ef16c15eb 100644
--- a/c/driver/postgresql/validation/tests/postgresql.py
+++ b/c/driver/postgresql/validation/tests/postgresql.py
@@ -39,6 +39,7 @@ class PostgreSQLQuirks(model.DriverQuirks):
         get_objects_constraints_foreign=False,
         get_objects_constraints_primary=False,
         get_objects_constraints_unique=False,
+        metadata_type_name=True,
         statement_bulk_ingest=True,
         statement_bulk_ingest_catalog=False,
         statement_bulk_ingest_schema=False,
diff --git a/docs/source/python/recipe/postgresql_execute_nocopy.py 
b/docs/source/python/recipe/postgresql_execute_nocopy.py
index b2120cd8c..de392ce15 100644
--- a/docs/source/python/recipe/postgresql_execute_nocopy.py
+++ b/docs/source/python/recipe/postgresql_execute_nocopy.py
@@ -42,8 +42,14 @@ with conn.cursor(
     print(cur.fetch_arrow_table().schema)
     # Output:
     # name: string
+    #   -- field metadata --
+    #   POSTGRESQL:type: 'text'
     # setting: string
+    #   -- field metadata --
+    #   POSTGRESQL:type: 'text'
     # description: string
+    #   -- field metadata --
+    #   POSTGRESQL:type: 'text'
 
 #: Or it can be set afterwards:
 
@@ -57,8 +63,14 @@ with conn.cursor() as cur:
     print(cur.fetch_arrow_table().schema)
     # Output:
     # name: string
+    #   -- field metadata --
+    #   POSTGRESQL:type: 'text'
     # setting: string
+    #   -- field metadata --
+    #   POSTGRESQL:type: 'text'
     # description: string
+    #   -- field metadata --
+    #   POSTGRESQL:type: 'text'
 
 #: Without the option, the query fails as the driver attempts to execute the
 #: query with ``COPY``:
diff --git a/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt 
b/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
index 0ac1231ec..e3dea7f7e 100644
--- a/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
+++ b/docs/source/python/recipe/postgresql_execute_nocopy.py.stdout.txt
@@ -1,6 +1,18 @@
 name: string
+  -- field metadata --
+  POSTGRESQL:type: 'text'
 setting: string
+  -- field metadata --
+  POSTGRESQL:type: 'text'
 description: string
+  -- field metadata --
+  POSTGRESQL:type: 'text'
 name: string
+  -- field metadata --
+  POSTGRESQL:type: 'text'
 setting: string
+  -- field metadata --
+  POSTGRESQL:type: 'text'
 description: string
+  -- field metadata --
+  POSTGRESQL:type: 'text'

Reply via email to