
**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

const ASTPtr & , const StorageMetadataPtr & metadata_snapshot, ContextPtr )
{
    return std::make_shared<PostgreSQLBlockOutputStream>(metadata_snapshot, pool->get(), remote_table_name, remote_table_schema);
}
void registerStoragePostgreSQL(StorageFactory & factory)
{
    factory.registerStorage("PostgreSQL", [](const StorageFactory::Arguments & args)
    {
        ASTs & engine_args = args.engine_args;
        if (engine_args.size() < 5 || engine_args.size() > 6)
            throw Exception("Storage PostgreSQL requires from 5 to 6 parameters: "
                            "PostgreSQL('host:port', 'database', 'table', 'username', 'password' [, 'schema']",
                ErrorCodes::NUMBER_OF_ARGUMENTS_DOESNT_MATCH);
        for (auto & engine_arg : engine_args)
            engine_arg = evaluateConstantExpressionOrIdentifierAsLiteral(engine_arg, args.getLocalContext());
        auto host_port = engine_args[0]->as<ASTLiteral &>().value.safeGet<String>();
        
        size_t max_addresses = args.getContext()->getSettingsRef().glob_expansion_max_elements;
        auto addresses = parseRemoteDescriptionForExternalDatabase(host_port, max_addresses, 5432);
        const String & remote_database = engine_args[1]->as<ASTLiteral &>().value.safeGet<String>();