
**Describe the unexpected behaviour**
currently data format name started with `timestamp`(timestamp/timestamptz) all converted to DateTime in postgres engine, this will losing precision of millisecond and microsecond, so they should be regarded as DtateTime64 data format


**Expected behavior**

they should be regarded as DtateTime64 data format

ordinary_columns_and_types = columns.getOrdinary();
    }
    else
    {
        if (!table_structure)
        {
            throw Exception(ErrorCodes::LOGICAL_ERROR,
                    "No table structure returned for table {}.{}", table_id.database_name, table_id.table_name);
        }
        if (!table_structure->columns)
        {
            throw Exception(ErrorCodes::LOGICAL_ERROR,
                    "No columns returned for table {}.{}", table_id.database_name, table_id.table_name);
        }
        ordinary_columns_and_types = *table_structure->columns;
        if (!table_structure->primary_key_columns && !table_structure->replica_identity_columns)
        {
            throw Exception(ErrorCodes::BAD_ARGUMENTS,
                    "Table {}.{} has no primary key and no replica identity index", table_id.database_name, table_id.table_name);
        }
        NamesAndTypesList merging_columns;
        if (table_structure->primary_key_columns)
            merging_columns = *table_structure->primary_key_columns;
        else
            merging_columns = *table_structure->replica_identity_columns;
        order_by_expression->name = "tuple";
        order_by_expression->arguments = std::make_shared<ASTExpressionList>();
        for (const auto & column : merging_columns)
            order_by_expression->arguments->children.emplace_back(std::make_shared<ASTIdentifier>(column.name));
    }