You can use point-in-time-recovery (PITR) to restore your primary Cloud SQL
instances whether the instance is live, or is deleted. PITR lets you restore
the instance to a specific point-in-time. A point-in-time recovery always creates
a new instance; you cannot perform a PITR to an existing instance.

Cloud SQL provides the following options to restore your instance
using PITR:

- [Perform a PITR on a live instance](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#perform-pitr)
- [Perform a PITR using the backup vault](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#backup-vault-pitr)

<!-- -->

- [Perform a PITR on an unavailable instance](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#perform-pitr-unavailable-instance)

<!-- -->

- [Perform a PITR on a deleted instance](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#perform-pitr-deleted-instance)

For performing a PITR on an unavailable or deleted instance, you'll need to
find the
[latest and earliest recovery time](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#get-the-latest-recovery-time).

## Perform a PITR


### Console

1. In the Google Cloud console, go to the **Cloud SQL Instances** page.

   [Go to Cloud SQL Instances](https://console.cloud.google.com/sql)
2. Open the more actions menu ![More actions icon.](https://docs.cloud.google.com/static/sql/images/more-actions.png) for the instance you want to recover and click **Create clone**.
3. Optionally, on the **Create a clone** page, update the ID of the new clone.
4. Select **Clone from an earlier point in time**.
5. Enter a PITR time.
6. Click **Create clone**.

### gcloud

Create a clone using PITR.

Replace the following:

- <var translate="no">SOURCE_INSTANCE_NAME</var> - Name of the instance you're restoring from.
- <var translate="no">NEW_INSTANCE_NAME</var> - Name for the clone.
- <var translate="no">TIMESTAMP</var> - UTC timezone for the source instance in RFC 3339 format. For example, 2012-11-15T16:19:00.094Z.

```bash
gcloud sql instances clone SOURCE_INSTANCE_NAME \
NEW_INSTANCE_NAME \
--point-in-time 'TIMESTAMP'
```

### REST v1


Before using any of the request data,
make the following replacements:

- <var translate="no">project-id</var>: The project ID
- <var translate="no">target-instance-id</var>: The target instance ID
- <var translate="no">source-instance-id</var>: The source instance ID
- <var translate="no">restore-timestamp</var> The point-in-time to restore up to


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
```


Request JSON body:

```
{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/target-instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "target-instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
```

### REST v1beta4


Before using any of the request data,
make the following replacements:

- <var translate="no">project-id</var>: The project ID
- <var translate="no">target-instance-id</var>: The target instance ID
- <var translate="no">source-instance-id</var>: The source instance ID
- <var translate="no">restore-timestamp</var> The point-in-time to restore up to


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone
```


Request JSON body:

```
{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "pointInTime": "restore-timestamp"
  }
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/target-instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "target-instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
```

## Perform a PITR using the backup vault

If your Cloud SQL instance is enabled to use
[enhanced backups](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/backups.md.txt#enhanced-backups),
then you can perform point-in-time-recovery for your instance using the
backup vault.

> [!NOTE]
> **Note:** If your backup vault is in a different region than your instance, then you can perform PITR only to a new instance in the same region as the source instance. For more information, see [Cross-region backups](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/backup-options.md.txt#eb-cross-region).

> [!NOTE]
> **Note:** If you're using Terraform or the Cloud SQL API to perform PITR and your instance uses enhanced backups, then Cloud SQL uses the PITR settings from the instance's associated backup plan.

### Console

1.

   In the Google Cloud console, go to the **Cloud SQL Instances** page.

   [Go to Cloud SQL Instances](https://console.cloud.google.com/sql)

   <br />

2. Open the more actions menu ![More actions icon.](https://docs.cloud.google.com/static/sql/images/more-actions.png) for the instance you
   want to recover and click **Create clone**.

3. Select **Clone from an earlier point in time**.

4. Enter a PITR time.

5. Click **Create clone**.

### gcloud

To perform a PITR on an instance from the backup vault, you'll need to find the
`data-source` for the backup that is nearest to the time you want to perform
the PITR. To find the backup, see
[List all the backups in the backup vault for an instance](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/backing-up#list-backup-vault). Once you've identified the backup, run the following command to perform the PITR:

    gcloud sql instances point-in-time-restore DATA_SOURCE \
        TARGET_INSTANCE_NAME \
        'PITR_TIMESTAMP' \
        --project=TARGET_PROJECT \
        --region=REGION

Replace the following:

- `DATA_SOURCE`: the path of the `data-source` for the source instance that is closest to the PITR timestamp you want to recover to.
- `TARGET_INSTANCE_NAME`: the name for the new instance that is created by the PITR operation.
- `PITR_TIMESTAMP`: the UTC timestamp for the source instance PITR log you want to restore your instance to, in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format. For example, 2025-11-15T16:19:00.094Z.
- `TARGET_PROJECT`: the project ID for the new instance.
- `REGION`: the region of the target instance. This field is required if the data source of the source instance is located in a multi-region or in a different region than the source instance. The target instance region must be the same as the region of the source instance.

### REST v1

To perform point-in-time recovery using a data source from the backup vault, use the
[`instances.pointInTimeRestore`](https://docs.cloud.google.com/sql/docs/postgres/admin-api/rest/v1/instances/pointInTimeRestore.md.txt) method with a POST request.


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the ID of the project where you want to create the new instance.
- <var translate="no">DATASOURCE</var>: the Backup and DR data source you want the service to use for the point-in-time restore operation.
- <var translate="no">PITR_TIMESTAMP</var>: the UTC timestamp for the source instance PITR log you want to restore your instance to, in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format. For example, 2012-11-15T16:19:00.094Z.
- <var translate="no">TARGET_INSTANCE_NAME</var>: the name of the instance created by the PITR operation.
- <var translate="no">REGION</var>: the region of the target instance. This field is required if the data source of source instance is located in a multi-region. The target instance region must be the same as the region of the source instance.


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID:pointInTimeRestore
```


Request JSON body:

```
{
  "datasource": "DATASOURCE",
  "pointInTime": "PITR_TIMESTAMP",
  "targetInstanceName": "TARGET_INSTANCE_NAME",
  "region": "REGION"
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID:pointInTimeRestore"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID:pointInTimeRestore" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/instances/TARGET_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CLONE",
  "name": "OPERATION_ID",
  "targetId": "TARGET_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
```

<br />

### REST v1beta4

To perform point-in-time recovery using a data source from the backup vault, use the
[`instances.pointInTimeRestore`](https://docs.cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances/pointInTimeRestore.md.txt) method with a POST request.


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the ID of the project where you want to create the new instance.
- <var translate="no">DATASOURCE</var>: the Backup and DR data source you want the service to use for the point-in-time restore operation.
- <var translate="no">PITR_TIMESTAMP</var>: the UTC timestamp for the source instance PITR log you want to restore your instance to, in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format. For example, 2012-11-15T16:19:00.094Z.
- <var translate="no">TARGET_INSTANCE_NAME</var>: the name of the instance created by the PITR operation.
- <var translate="no">REGION</var>: the region of the target instance. This field is required if the data source of source instance is located in a multi-region. The target instance region must be the same as the region of the source instance.


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID:pointInTimeRestore
```


Request JSON body:

```
{
  "datasource": "DATASOURCE",
  "pointInTime": "PITR_TIMESTAMP",
  "targetInstanceName": "TARGET_INSTANCE_NAME",
  "region": "REGION"
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID:pointInTimeRestore"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID:pointInTimeRestore" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/TARGET_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CLONE",
  "name": "OPERATION_ID",
  "targetId": "TARGET_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}
```

<br />

### Perform a cross-project PITR

With enhanced backups, you can restore a Cloud SQL instance to a
project other than the one where either the source instance or backup vault is
located.

Cross-project PITR is supported only through the [gcloud CLI](https://docs.cloud.google.com/sdk/gcloud.md.txt) and REST APIs.

To perform a cross-project PITR, do one of the following:

- If you're using the gcloud CLI, set the `--project` flag to the
  project where you want to create the target instance.

- If you're using REST APIs, set the `PROJECT_ID` field to the project where
  you want to create the target instance.

## Perform PITR on an unavailable instance

### Console

You might want to recover an
[instance that isn't available](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/restore.md.txt#pitr-instance-not-available)
to a different zone because of the following reasons:

- The zone in which the instance is configured isn't accessible. This instance has a `FAILED` state.
- The instance is undergoing maintenance. This instance has a `MAINTENANCE` state.

To recover an unavailable instance, complete the following steps:

1. In the Google Cloud console, go to the **Cloud SQL Instances** page.

   [Go to Cloud SQL Instances](https://console.cloud.google.com/sql)
2. Find the row of the instance to clone.
3. In the **Actions** column, click the **More Actions** menu.
4. Click **Create clone**.
5. On the **Create a clone** page, complete the following actions:
   1. In the **Instance ID** field, update the instance ID, if needed.
   2. Click **Clone from an earlier point in time**.
   3. In the **Point in time** field, select a date and time from which you want to clone data. This recovers the state of the instance from that point in time.
   4. Click **Create clone**.
6. While the clone initializes, you're returned to the instance listing page.

### gcloud

You might want to recover an
[instance that isn't available](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/restore.md.txt#pitr-instance-not-available)
to a different zone because the zone in which the instance is configured
isn't accessible.

```bash
gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--point-in-time DATE_AND_TIME_STAMP \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME
```

The user or service account that's running the `gcloud sql instances clone`
command must have the `cloudsql.instances.clone` and `cloudsql.instances.create` permissions. For more
information about required permissions to run [gcloud CLI](https://docs.cloud.google.com/sdk/gcloud.md.txt) commands, see
[Cloud SQL permissions](https://docs.cloud.google.com/sql/docs/postgres/iam-permissions.md.txt).

### REST v1

You might want to recover an [instance that isn't available](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/restore.md.txt#pitr-instance-not-available) to a different zone because the zone in which the instance is configured isn't accessible.


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the project ID.
- <var translate="no">SOURCE_INSTANCE_NAME</var>: the name of the source instance.
- <var translate="no">TARGET_INSTANCE_NAME</var>: the name of the target (cloned) instance.
- <var translate="no">DATE_AND_TIME_STAMP</var>: a date-and-time stamp for the source instance in the [UTC time zone](https://www.timeanddate.com/time/zone/timezone/utc) and in the [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format (for example,   
  `2012-11-15T16:19:00.094Z`).
- <var translate="no">ZONE_NAME</var>: Optional. The name of the primary zone for the target instance. This is used to specify a different primary zone for the Cloud SQL instance that you want to clone. For a regional instance, this zone replaces the primary zone, but the secondary zone remains the same as the instance.
- <var translate="no">SECONDARY_ZONE_NAME</var>: Optional. The name of the secondary zone for the target instance. This is used to specify a different secondary zone for the regional Cloud SQL instance that you want to clone.


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
```


Request JSON body:

```
{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/TARGET_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CLONE",
  "name": "OPERATION_ID",
  "targetId": "TARGET_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID",
  "instanceUid": "INSTANCE_ID"
}
```

The user or service account that's using the [`instances.clone`](https://docs.cloud.google.com/sql/docs/postgres/admin-api/rest/v1/instances/clone.md.txt) API method must have the `cloudsql.instances.clone` and `cloudsql.instances.create` permissions. For more information about required permissions to use API methods, see [Cloud SQL permissions](https://docs.cloud.google.com/sql/docs/postgres/iam-permissions.md.txt).

### REST v1beta4

You might want to recover an [instance that isn't available](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/restore.md.txt#pitr-instance-not-available) to a different zone because the zone in which the instance is configured isn't accessible.


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the project ID.
- <var translate="no">SOURCE_INSTANCE_NAME</var>: the name of the source instance.
- <var translate="no">TARGET_INSTANCE_NAME</var>: the name of the target (cloned) instance.
- <var translate="no">DATE_AND_TIME_STAMP</var>: a date-and-time stamp for the source instance in the [UTC time zone](https://www.timeanddate.com/time/zone/timezone/utc) and in the [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format (for example,   
  `2012-11-15T16:19:00.094Z`).
- <var translate="no">ZONE_NAME</var>: Optional. The name of the primary zone for the target instance. This is used to specify a different primary zone for the Cloud SQL instance that you want to clone. For a regional instance, this zone replaces the primary zone, but the secondary zone remains the same as the instance.
- <var translate="no">SECONDARY_ZONE_NAME</var>: Optional. The name of the secondary zone for the target instance. This is used to specify a different secondary zone for the regional Cloud SQL instance that you want to clone.


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone
```


Request JSON body:

```
{
  "cloneContext":
  {
    "destinationInstanceName": "TARGET_INSTANCE_NAME",
    "pointInTime": "DATE_AND_TIME_STAMP",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/TARGET_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CLONE",
  "name": "OPERATION_ID",
  "targetId": "TARGET_INSTANCE_ID",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID",
  "instanceUid": "INSTANCE_ID"
}
```

The user or service account that's using the [`instances.clone`](https://docs.cloud.google.com/sql/docs/postgres/admin-api/rest/v1beta4/instances/clone.md.txt) API method must have the `cloudsql.instances.clone` and `cloudsql.instances.create` permissions. For more information about required permissions to use API methods, see [Cloud SQL permissions](https://docs.cloud.google.com/sql/docs/postgres/iam-permissions.md.txt).

If you try to create a PITR clone at a time after the latest recoverable time,
then the following error message is given:

```bash
The timestamp for point-in-time recovery is after the latest recovery time of
Timestamp of latest recovery time. Clone the instance with a time
that's earlier than this recovery time.
```

## Perform PITR on a deleted instance

To use PITR to restore a deleted instance, you'll need:

- the PITR timestamp (`timestamp`) you want to restore your instance to
- the target instance name
- the time the source instance was deleted (`source-instance-deletion-time`)

You can use
PITR on a deleted instance using gcloud CLI or the Cloud SQL
API only. For more information, see
[Restore a deleted instance using a PITR](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/restore.md.txt#deleted-instance).

### gcloud

### Standard backup

**Find your PITR window**

To find your deleted instance's PITR window, get the
[earliest and latest recovery time](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#get-the-latest-recovery-time)
for your instance. You can select anytime timestamp in this window to
perform a PITR.

**Find source instance deletion**

The `source-instance-deletion-time` and `log-retention-days` for the
deleted instance are stored with the retained backups for your instance after
deletion. To find a list of all available backups for your deleted instance, see
[List retained backups](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/manage-retained-backups#gcloud_1).

Once you identify the backup you want to use, use the
[gcloud sql backups describe](https://docs.cloud.google.com/sdk/gcloud/reference/sql/instances/describe)
command to get the `source-instance-deletion-time`.

**Restore using a PITR**

To restore your deleted instance using a PITR, run the following command:

    gcloud sql instances clone SOURCE_INSTANCE_NAME \
    NEW_INSTANCE_NAME \
    --point-in-time='PITR_TIMESTAMP' \
    --source-instance-deletion-time=SOURCE_INSTANCE_DELETION_TIMESTAMP

Replace the following:

- `SOURCE_INSTANCE_NAME`: the name of the source instance that you want to restore.
- `NEW_INSTANCE_NAME`: the name of the new instance.
- `PITR_TIMESTAMP`: the UTC timestamp for the source instance PITR log you want to restore your instance to, in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format. For example, 2012-11-15T16:19:00.094Z.
- `SOURCE_INSTANCE_DELETION_TIMESTAMP`: the UTC timestamp for the time that the source instance was deleted, in RFC 3339 format. For example, 2012-11-15T16:19:00.094Z.

### Enhanced backup

**Find your PITR window**

To find your deleted instance's PITR window, get the
[earliest and latest recovery time](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#get-the-latest-recovery-time)
for your instance. You can select anytime timestamp in this window to
perform a PITR.

**Find the data source**

The data source for the
deleted instance are stored with the retained backups for your instance after
deletion. To find these values for your deleted instance, see
[List all the backups in the backup vault for your instance](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/manage-enhanced-backups.md.txt#list-backups).

**Restore using a PITR**

To restore your deleted instance using a PITR, run the following command:

    gcloud sql instances point-in-time-restore DATA_SOURCE \
        TARGET_INSTANCE_NAME \
        'PITR_TIMESTAMP' \
        --project=TARGET_PROJECT \
        --region=REGION

Replace the following:

- `DATA_SOURCE`: the path of the `data-source` for the backup that is closest to the PITR timestamp you want to recover to.
- `TARGET_INSTANCE_NAME`: the name for the new instance that is created by the PITR operation.
- `PITR_TIMESTAMP`: the UTC timestamp for the source instance PITR log you want to restore your instance to, in [RFC 3339](https://www.rfc-editor.org/rfc/rfc3339) format. For example, 2025-11-15T16:19:00.094Z.
- `TARGET_PROJECT`: the project ID for the new instance.
- `REGION`: the region of the target instance. This field is required if the data source of the source instance is located in a multi-region. The target instance region must be the same as the region of the source instance.

### REST v1

**Find your PITR window**

To find your deleted instance's PITR window, get the
[earliest and latest recovery time](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#get-the-latest-recovery-time)
for your instance. You can select anytime timestamp in this window to
perform a PITR.

**Find source instance deletion time and log retention days**

The `source-instance-deletion-time` and `log-retention-days` for the
deleted instance are stored with the retained backups for your instance after
deletion. To find these values for your deleted instance, see
[List retained backups](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/manage-retained-backups#rest-v1).

**Restore using a PITR**


Before using any of the request data,
make the following replacements:

- <var translate="no">project-id</var>: the project ID
- <var translate="no">target-instance-id</var>: the target instance ID
- <var translate="no">source-instance-id</var>: the source instance ID
- <var translate="no">source-instance-deletion-time</var>: the deletion time of the source instance
- <var translate="no">restore-timestamp</var> the point-in-time which you want to restore the instance


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone
```


Request JSON body:

```
{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "sourceInstanceDeletionTime: "source-instance-deletion-time",
    "pointInTime": "restore-timestamp"
  }
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/project-id/instances/target-instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CLONE",
  "name": "operation-id",
  "targetId": "target-instance-id",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
```

<br />

### REST v1beta4

**Find your PITR window**

To find your deleted instance's PITR window, get the
[earliest and latest recovery time](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#get-the-latest-recovery-time)
for your instance. You can select anytime timestamp in this window to
perform PITR.

**Find source instance deletion time and log retention days**

The `source-instance-deletion-time` and `log-retention-days` for the
deleted instance are stored with the retained backups for your instance after
deletion. To find these values for your deleted instance, see
[List retained backups](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/manage-retained-backups#rest-v1beta4).

**Restore using PITR**


Before using any of the request data,
make the following replacements:

- <var translate="no">project-id</var>: the project ID
- <var translate="no">target-instance-id</var>: the target instance ID
- <var translate="no">source-instance-id</var>: the source instance ID
- <var translate="no">source-instance-deletion-time</var>: the deletion time of the source instance
- <var translate="no">restore-timestamp</var> the point-in-time which you want to restore the instance


HTTP method and URL:

```
POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone
```


Request JSON body:

```
{
  "cloneContext":
  {
    "kind": "sql#cloneContext",
    "destinationInstanceName": "target-instance-id",
    "sourceInstanceDeletionTime: "source-instance-deletion-time",
    "pointInTime": "restore-timestamp"
  }
}
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Save the request body in a file named `request.json`,
and execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

#### Response

```
{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/target-instance-id",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-21T22:43:37.981Z",
  "operationType": "CREATE",
  "name": "operation-id",
  "targetId": "target-instance-id",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/operations/operation-id",
  "targetProject": "project-id"
}
```

<br />

## Get the earliest and latest recovery time

For an available instance, you can perform a PITR to any timestamp in the
instance's PITR window. The PITR window starts a the earliest recovery time
and ends at the latest recovery time. If the
instance is unavailable and the instance logs are stored in [Cloud Storage](https://docs.cloud.google.com/storage/docs.md.txt),
or the instance was deleted and had
[PITR retention enabled](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/restore.md.txt#deleted-instance),
then you can retrieve the earliest and latest recovery time, and perform the
PITR to any timestamp in that window.
In all cases, you can [restore the instance to a different primary or secondary zone](https://docs.cloud.google.com/sql/docs/postgres/backup-recovery/pitr.md.txt#perform-PITR-unavailable-instance)
by providing values for the preferred zones.

### gcloud

**Unavailable instance**

To get the earliest and latest time to which you can recover a
Cloud SQL instance that's not available, run the following command:

    gcloud sql instances get-latest-recovery-time INSTANCE_NAME

Replace the following:

- `INSTANCE_NAME`: the name of the instance you want to find the latest recovery time for.

**Deleted instance**

To get the earliest and latest time to which you can recover a
Cloud SQL deleted instance to, run the following command:

    gcloud sql instances get-latest-recovery-time INSTANCE_NAME \
        --source-instance-deletion-time='SOURCE_INSTANCE_DELETION_TIMESTAMP'

Replace the following:

- `INSTANCE_NAME`: the name of the instance you want to find the latest recovery time for.
- `SOURCE_INSTANCE_DELETION_TIMESTAMP`: the UTC timestamp for the time that the source instance was deleted, in RFC 3339 format. For example, 2012-11-15T16:19:00.094Z.

### REST v1

**Unavailable instance**


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the project ID
- <var translate="no">INSTANCE_NAME</var>: the name of the instance for which you're querying for the latest recovery time


HTTP method and URL:

```
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

```
{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
```

<br />

**Deleted instance**


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the project ID
- <var translate="no">INSTANCE_NAME</var>: the name of the source instance for which you're querying for the latest recovery time
- <var translate="no">SOURCE_INSTANCE_DELETION_TIME</var>: the time that the source instance was deleted


HTTP method and URL:

```
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

```
{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
```

<br />

### REST v1beta4

**Unavailable instance**


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the project ID
- <var translate="no">INSTANCE_NAME</var>: the name of the instance for which you're querying for the latest recovery time


HTTP method and URL:

```
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

```
{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
```

<br />

**Deleted instance**


Before using any of the request data,
make the following replacements:

- <var translate="no">PROJECT_ID</var>: the project ID
- <var translate="no">INSTANCE_NAME</var>: the name of the source instance for which you're querying for the latest recovery time
- <var translate="no">SOURCE_INSTANCE_DELETION_TIME</var>: the time that the source instance was deleted


HTTP method and URL:

```
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime
```

To send your request, expand one of these options:

#### curl (Linux, macOS, or Cloud Shell)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) , or by using [Cloud Shell](https://docs.cloud.google.com/shell/docs.md.txt), which automatically logs you into the `gcloud` CLI . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
curl -X GET \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime"
```

#### PowerShell (Windows)

> [!NOTE]
> **Note:** The following command assumes that you have logged in to the `gcloud` CLI with your user account by running [`gcloud init`](https://docs.cloud.google.com/sdk/gcloud/reference/init) or [`gcloud auth login`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/login.md.txt) . You can check the currently active account by running [`gcloud auth list`](https://docs.cloud.google.com/sdk/gcloud/reference/auth/list.md.txt).


Execute the following command:

```
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME/getLatestRecoveryTime" | Select-Object -Expand Content
```

You should receive a JSON response similar to the following:

```
{
  "kind": "sql#getLatestRecoveryTime",
  "earliestRecoveryTime": "2023-06-10T17:23:59.648821586Z",
  "latestRecoveryTime": "2023-06-20T17:23:59.648821586Z"
}
```

<br />

## Troubleshoot

| Issue | Troubleshooting |
|---|---|
| `argument --point-in-time: Failed to parse date/time: Unknown string format: 2021-0928T30:54:03.094; received: 2021-0928T30:54:03.094Z` OR `Invalid value at 'body.clone_context.point_in_time' (type.googleapis.com/google.protobuf.Timestamp), Field 'pointInTime', Invalid time format: Failed to parse input,` | The timestamp you provided is invalid. |
| `HTTP Error 400: Successful backup required for carrying out the operation was not found.` OR `Successful backup required for carrying out the operation was not found. or Time where no backups can be found.` | The timestamp that you provided is for a time where backups or when binlog coordinates could not be found. |

## What's next

- [Configure flags](https://docs.cloud.google.com/sql/docs/postgres/flags.md.txt) on your clone