The AT MILESTONE and AT TIME options are available only in the Premium edition as they enable PITR, which is a Premium feature. For more information, see SingleStore Editions.

In the SingleStore Free version, this command is not supported.


Prior to using this command, the enable_bottomless engine variable must be set to ON (the default value).

Restores an unlimited storage database at a restore point and then brings the database online.

See Permissions Matrix for the permissions required to use this command.


ATTACH DATABASE remote_database_name ON <object_store_settings> [AT MILESTONE milestone_name | AT TIME attach_time]
[STORAGEID <storage id>]
<S3_object_store_configuration> |
<AZURE_object_store_configuration> |
S3 "bucket/path" 
[CONFIG '<configuration_json>']
CREDENTIALS '<credentials_json>'
    AZURE "container/blob-prefix" 
      [CONFIG '<configuration_json>']
      CREDENTIALS '<credentials_json>'
{"account_name": "your_account_name_here", "account_key": "your_account_key_here"}
   GCS "bucket/path" 
    [CONFIG '<configuration_json>']
    CREDENTIALS '<credentials_json>'
{"access_id": "your_google_access_key", "secret_key": "your_google_secret_key"}



A DATETIME or DATETIME(6) literal.


A quoted string, which is the name of a milestone to restore to.


  • If remote_database_name is currently attached, it must be detached (using DETACH DATABASE) before it can be reattached. At the time of reattaching ensure the object_store_settings and configurations are the same as those used at the time of the database creation.

  • AT TIME attaches the database, with its contents restored to the specified point in time. The specified time may be a DATETIME or a DATETIME(6) literal. An error will be returned if you attempt to attach a database at time literal that is later than the time of the latest detach.

  • If AT MILESTONE and AT TIME are not specified, the database is attached at the latest state where all information is available for committed transactions.

  • If AT MILESTONE or AT TIME are specified, the restore point must be within the unlimited storage database retention period.

  • You cannot specify both AT MILESTONE and AT TIME.

  • remote_database_name of the attached database can be different than the remote_database_name used when the database was detached.

  • CONFIG '<configuration_json>' and CREDENTIALS '<credentials_json>' : for S3 the options are anything that S3 supports. For Azure and GCS the config is optional. For configuration examples refer BACKUP DATABASE

  • STORAGEID <storage id>: should be used to avoid the 2523 error when multiple bottomless databases are created on S3 in the same folder, and any one of the database is detached and re-attached . The storage id value can be found from the STORAGE_ID column in the information_schema.MV_BOTTOMLESS_REMOTE_STATS table.

  • Attaching an unlimited storage database can be faster than restoring an equivalent local storage database. This is because an attach of an unlimited storage database does not copy all data to the cluster, as is the case with the restore of a local storage database. Note that after an unlimited storage database is attached, queries may be slower for some time until remote data is cached locally in the cluster.

  • This command cannot be run on system databases.


Using S3

ATTACH DATABASE memsql_demo ON S3 "demo_bucket/"
  CONFIG '{"region":"us-east-1"}'
  CREDENTIALS '{"aws_access_key_id":"your_access_key_id","aws_secret_access_key":"your_secret_access_key"}';

Using Azure

ATTACH DATABASE memsql_demo ON AZURE "demo_bucket/"
CREDENTIALS '{"account_name":"your_account_name_here","account_key":"your_account_key_here"}';

Using GCS

ATTACH DATABASE memsql_demo ON GCS "demo_bucket/"
  CREDENTIALS '{"access_id":"your_google_access_key","secret_key":"your_google_secret_key"}';

Last modified: March 6, 2024

Was this article helpful?