diff --git a/src/Core/PostgreSQL/insertPostgreSQLValue.cpp b/src/Core/PostgreSQL/insertPostgreSQLValue.cpp index 0ce7222a9a5..559e51f2e70 100644 --- a/src/Core/PostgreSQL/insertPostgreSQLValue.cpp +++ b/src/Core/PostgreSQL/insertPostgreSQLValue.cpp @@ -3,6 +3,7 @@ #if USE_LIBPQXX #include #include +#include #include #include #include @@ -82,6 +83,8 @@ void insertPostgreSQLValue( case ExternalResultDescription::ValueType::vtEnum8: case ExternalResultDescription::ValueType::vtEnum16: case ExternalResultDescription::ValueType::vtFixedString: + assert_cast(column).insertData(value.data(), value.size()); + break; case ExternalResultDescription::ValueType::vtString: assert_cast(column).insertData(value.data(), value.size()); break; diff --git a/tests/integration/test_storage_postgresql/test.py b/tests/integration/test_storage_postgresql/test.py index 12823f1f72d..cb7451e1cad 100644 --- a/tests/integration/test_storage_postgresql/test.py +++ b/tests/integration/test_storage_postgresql/test.py @@ -888,6 +888,26 @@ def test_filter_pushdown(started_cluster): cursor.execute("DROP SCHEMA test_filter_pushdown CASCADE") +def test_fixed_string_type(started_cluster): + cursor = started_cluster.postgres_conn.cursor() + cursor.execute("DROP TABLE IF EXISTS test_fixed_string") + cursor.execute( + "CREATE TABLE test_fixed_string (contact_id numeric NULL, email varchar NULL)" + ) + cursor.execute("INSERT INTO test_fixed_string values (1, 'abc')") + + node1.query("DROP TABLE IF EXISTS test_fixed_string") + node1.query( + "CREATE TABLE test_fixed_string(contact_id Int64, email Nullable(FixedString(3))) ENGINE = PostgreSQL('postgres1:5432', 'postgres', 'test_fixed_string', 'postgres', 'mysecretpassword')" + ) + + result = node1.query("SELECT * FROM test_fixed_string format TSV") + + assert result.strip() == "1\tabc" + + node1.query("DROP TABLE test_fixed_string") + + if __name__ == "__main__": cluster.start() input("Cluster created, press any key to destroy...")