PostgreSQL CLI Tool Installation & Use
See how to leverage command line interface (CLI) functionality for our hosting for PostgreSQL service. This ScaleGrid tool allows you to perform the same actions you can through the console from the command line.
The CLI tool is written in Python and published as a Python package, and the package simply needs to be installed into your machine from the Package Index. The CLI currently supports generic, Mongo-specific, Redis-specific and PostgreSQL-specific commands, and support for MySQL will be added in the future versions.
ScaleGrid CLI Tool for PostgreSQL Installation
- This package requires Python>=3.6, and you can follow these steps to install Python.
- Installing the package is straightforward – run pip install
- You must log in to your ScaleGrid account before you can perform any of the actions. This can be done by running sg-cli login from the CLI.
- By default the CLI will attempt to connect to scalegrid.io. If you are running your own ScaleGrid Controller (E.g. On-premise VMWare install) you can specify the controller server using the “--controller-ip” option on sg-cli. Use “sg-cli -h” for more information.
- You will be prompted to enter your email address, password and 2FA code. Upon successful authentication, a cookie will be set up for the session and you will be logged in.
You will now be able to perform actions on your PostgreSQL clusters from the CLI!
PostgreSQL CLI Examples
The following actions can be performed from the command line:
Help Command
Get the Help menu for PostgreSQL
sg-cli postgresql --helpPostgreSQL Help Menu
Usage:
sg-cli postgresql <command> [<args>...]
Options:
-v, --verbose Increase verbosity
-h, --help Show this menu
-V --version Show version
Commands:
create-cloud-profile
get-available-db-versions
create-cluster
list-clusters
get-cluster-credentials
reset-credentials
pause-cluster
resume-cluster
refresh-cluster
delete-cluster
update-firewall-rules
get-firewall-rules
scale-up
patch-os
upgrade-agent
list-backups
get-backup-schedule
set-backup-schedule
peek-at-backup
restore-backup
start-backup
delete-backup
create-alert-rule
list-alert-rules
delete-alert-rule
get-active-alerts
resolve-alerts
setup-follower
sync-follower
get-follower-status
stop-following
set-pgbouncer
get-pgbouncer-config
modify-pgbouncer-configcreate-cloud-profile
Create a cloud profile for PostgreSQL deployments
sg-cli postgresql create-cloud-profile -hsg-cli postgresql create-cloud-profile --aws --cloud-profile-name AWSPgProfile --region uswest1 --access-key <> --secret-key <> --vpc-id vpc-e0359578 --vpc-cidr 172.31.0.0/16 --subnet-id subnet-3254d7d1 --subnet-cidr 172.31.0.0/20 --security-group-name aws-private-sg --security-group-id sg-987r5l26
--enable-sshsg-cli postgresql create-cloud-profile create-cloud-profile --azure --cloud-profile-name AzurePgProfile --region eastus --subscription-id <> --subnet-name subnet1-eastus --vnet-name vnet-aksd2497 --vnet-resource-group eastustest --security-group-name azure-private-sg --enable-sshNew cloud profile ID: 3738. Keep this ID and use it to perform commands on your cloud profile once it is created.
To get more information about your cloud profile once it is created, run the list-cloud-profiles command.
Action ID: 1385126
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 1385126get-available-db-versions
Get the PostgreSQL versions available on the given Cloud
sg-cli postgresql get-available-db-versions -hsg-cli postgresql get-available-db-versions --cloud-type AWSV1302 (v13.2)
V1206 (v12.6)
V1111 (v11.11)
V1014 (v10.14)create-cluster
Create the cluster according to the parameters provided
sg-cli postgresql create-cluster -hsg-cli postgresql create-cluster --cluster-name testingPG --shard-count 1 --replica-count 1 --size micro --version V1302 --cloud-profile-list AWSPgProfile --enable-pgBouncer --pool-size 50 --pool-mode statement --encrypt-disk --enable-sslsg-cli postgresql create-cluster --cluster-name testingPGMS --shard-count 1 --replica-count 2 --size small --version V1302 --cloud-profile-list "AWSPgProfile,AWSPgProfile,AWSPgProfile" --enable-ssl --encrypt-disk --replication-type SYNC --sync-commit-type REMOTE_WRITE --enable-pgBouncer --pool-mode statement --pool-size 50 --max-client-connections 100 --max-user-connections 100 --max-db-connections 100New cluster ID: 21. Keep this ID and use it to perform commands on your cluster once it is created.
To get more information about your cluster once it is created, run the list-clusters command.
Action ID: 5051
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5051list-clusters
Get basic info about all or a specific PostgreSQL cluster
sg-cli postgresql list-clusters -hsg-cli postgresql list-clusters{
"name": "test2",
"id": 22,
"clusterType": "Standalone",
"planType": "BYOC",
"status": "Running",
"size": "Micro",
"versionStr": "v13.2",
"diskSizeGB": 10,
"usedDiskSizeGB": 1,
"shards": [
{
"name": "Shard-0",
"postgreSQLServers": [
{
"addressableName": "SG-test2-68.devservers.scalegrid.io",
"cloudProfileName": "postprof",
"status": "Running",
"master": true,
"standby": false,
"arbiter": false,
"readReplica": false
}
]
}
],
"sslEnabled": false,
"encryptionEnabled": false,
"isPgBouncerEnabled": true,
"pgBouncerParams": {
"pgBouncerPort": 6432,
"settings": {
"max_client_connections": "1000",
"pool_mode": "transaction",
"pool_size": "80"
}
}
}
{
"name": "test1",
"id": 21,
"clusterType": "Standalone",
"planType": "BYOC",
"status": "Refreshing",
"size": "Micro",
"versionStr": "v13.2",
"diskSizeGB": 0,
"usedDiskSizeGB": 0,
"shards": [
{
"name": "Shard-0",
"postgreSQLServers": [
{
"addressableName": "SG-test1-67.devservers.scalegrid.io",
"cloudProfileName": "postprof",
"status": "Running",
"master": true,
"standby": false,
"arbiter": false,
"readReplica": false
}
]
}
],
"sslEnabled": false,
"encryptionEnabled": false,
"isPgBouncerEnabled": true,
"pgBouncerParams": {
"pgBouncerPort": 6432,
"settings": {
"max_client_connections": "1000",
"pool_mode": null,
"pool_size": "80"
}
}
}sg-cli postgresql list-clusters --cluster-name test1{
"name": "test1",
"id": 21,
"clusterType": "Standalone",
"planType": "BYOC",
"status": "Failed",
"size": "Micro",
"versionStr": "v13.2",
"diskSizeGB": 0,
"usedDiskSizeGB": 0,
"shards": [
{
"name": "Shard-0",
"postgreSQLServers": [
{
"addressableName": "SG-test1-67.devservers.scalegrid.io",
"cloudProfileName": "postprof",
"status": "Running",
"master": true,
"standby": false,
"arbiter": false,
"readReplica": false
}
]
}
],
"sslEnabled": false,
"encryptionEnabled": false,
"isPgBouncerEnabled": true,
"pgBouncerParams": {
"pgBouncerPort": 6432,
"settings": {
"max_client_connections": "1000",
"pool_mode": null,
"pool_size": "80"
}
}
}get-cluster-credentials
Get the root-user credentials for your deployed cluster
sg-cli postgresql get-cluster-credentials -hsg-cli postgresql get-cluster-credentials --cluster-name test2Username: sgpostgres
Password: SVIM7A$UlGtJ1r1T
Connection Strings:
For JDBC: jdbc:postgresql://SG-test2-36-pgsql-master.devservers.scalegrid.io:5432/<your-database-name>
For ODBC: DRIVER={PostgreSQL UNICODE}; Server=SG-test2-36-pgsql-master.devservers.scalegrid.io; Port=5432; Uid=<user>; Pwd=<password>; Database=<your_database_name>;
For PHP: $dbconn = pg_connect ("host=SG-test2-36-pgsql-master.devservers.scalegrid.io user=<user> password=<password> dbname=<your-database-name> port=5432);
For PYTHON: cnx = psycopg2.connect(host="SG-test2-36-pgsql-master.devservers.scalegrid.io" user="<user>" password="<password>" dbname="<your-database-name>" port=5432)
For RUBY: con = PG::Connection.open(user: "<user>", password: "<password>", database: "<your-database-name>", host: "SG-test2-36-pgsql-master.devservers.scalegrid.io", port: 5432)
For Node.js: var client = new pg.Client('postgresql://SG-test2-36-pgsql-master.devservers.scalegrid.io:5432/<your-database-name>');
Command Line Syntax:
psql -W -U sgpostgres -p 5432 -h SG-test2-36-pgsql-master.devservers.scalegrid.io -d postgresreset-credentials
Reset the root-user credentials for your deployed cluster
sg-cli postgresql reset-credentials -hsg-cli postgresql reset-credentials --cluster-name test2Credentials rotated successfully
Action ID: 5054
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5054
To view the new login credentials run:
sg-cli postgresql get-cluster-credentials --cluster-name test2pause-cluster
Pause your deployed cluster
sg-cli postgresql pause-cluster -hsg-cli postgresql pause-cluster --cluster-name test2Pause started successfully
Action ID: 5061
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5061resume-cluster
Resume your deployed cluster
sg-cli postgresql resume-cluster -hsg-cli postgresql resume-cluster --cluster-name test2Resume started successfully
Action ID: 5062
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5062refresh-cluster
Refresh your deployed cluster
sg-cli postgresql refresh-cluster -hsg-cli postgresql refresh-cluster --cluster-name test2Refresh started successfully
Action ID: 5062
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5062delete-cluster
Refresh your deployed cluster
sg-cli postgresql delete-cluster -hsg-cli postgresql delete-cluster --cluster-name test2Cluster delete started successfully
Action ID: 5065
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5062set-firewall-rules
Set firewall rules on your deployed cluster
sg-cli postgresql set-firewall-rules -hsg-cli postgresql set-firewall-rules --cluster-name test2 --cidr-list "10.0.0.0/16,172.16.0.0/16,52.13.23.41/32"Firewall rules set successfullyget-firewall-rules
Get firewall rules for your deployed cluster
sg-cli postgresql get-firewall-rules -hsg-cli postgresql get-firewall-rules --cluster-name test2{
"cidrList": [
"10.0.0.0/16",
"172.16.0.0/16",
"52.13.23.41/32"
]
}get-config
Get all database parameter configurations for your deployment
sg-cli postgresql get-config -hsg-cli postgresql get-config --cluster-name test2{
"param_name": "statement_timeout",
"current_val": "0",
"unit": "ms",
"valid_vals": null,
"editable": true
}
{
"param_name": "xmlbinary",
"current_val": "'base64'",
"unit": "",
"valid_vals": [
"base64",
"hex"
],
"editable": false
}update-config
Update database parameter configurations for your deployment
sg-cli postgresql update-config -hDry-run(check if server restart is required:
sg-cli postgresql update-config --cluster-name test2 —-param-key-value “max_logical_replication_workers:4” –-dry-run
Apply-config:
sg-cli postgresql update-config --cluster-name test2 —-param-key-value “max_logical_replication_workers:4, max_wal_size:4000”Dry-run:
The following configuration changes require PostgreSQL server to be restarted. For replication setup, this will be done as rolling job.
If you wish to proceed, remove the '--dry-run' flag and run again.
Apply-config:
Config Update in progress..
Action ID: 3906176
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 3906176scale-up
Scale your deployed cluster up to your specified size
sg-cli postgresql scale-up -hsg-cli postgresql scale-up --cluster-name test2 --size xlargeScale up started successfully
Action ID: 5062
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5062patch-os
Start Patch-os activity on your deployed cluster
sg-cli postgresql patch-os -hsg-cli postgresql patch-os --cluster-name test2OS Patch started successfully
Action ID: 5069
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5069upgrade-agent
Upgrade ScaleGrid Agent on your deployed cluster
sg-cli postgresql upgrade-agent -hsg-cli postgresql upgrade-agent --cluster-name test2Upgrading Agent
Action ID: 5072
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5072list-backups
List the backups taken on your deployed cluster
sg-cli postgresql list-backups -hsg-cli postgresql list-backups --cluster-name test2 --backup-name test2backupsg-cli postgresql list-backups --cluster-name test2{
"name": "test2backup",
"id": 24,
"object_id": 24,
"created": "2022-01-24 08:16:23",
"cloudType": "ONDEMAND",
"comment": null
}get-backup-schedule
Get the backup-schedule for your deployed cluster
sg-cli postgresql get-backup-schedule -hsg-cli postgresql get-backup-schedule --cluster-name test2{
"backupHour": 23,
"backupIntervalInHours": 8,
"backupScheduledBackupLimit": 10,
"target": "MASTER"
}set-backup-schedule
Set the backup schedule for your deployed cluster
sg-cli postgresql set-backup-schedule -hsg-cli postgresql set-backup-schedule --cluster-name test2 --interval 8 --hour 23 --limit 10Backup schedule set successfullysg-cli postgresql set-backup-schedule --cluster-name test2 --disabledScheduled backups disabledpeek-at-backup
Create a new standalone cluster from a past backup
sg-cli postgresql peek-at-backup -hsg-cli postgresql peek-at-backup --source-cluster test2 --backup-name test2backup --cluster-name NewPeekedClusterPeek started successfully
Action ID: 5062
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5062restore-backup
Restore a backup
sg-cli postgresql restore-backup -hsg-cli postgresql restore-backup --cluster-name test2 --backup-name test2backuptest2backup restore started successfully
Action ID: 5062
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5062start-backup
Create a backup of the cluster
sg-cli postgresql start-backup -hsg-cli postgresql start-backup --cluster-name test2 --backup-name test2backuptest2 backup started successfully
Action ID: 5075
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5075delete-backup
Delete a backup of the cluster
sg-cli postgresql delete-backup -hsg-cli postgresql delete-backup --cluster-name test2 --backup-name test2backupBackup Delete started successfully
Action ID: 5082
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5082create-alert-rule
Create an alert-rule for the cluster
sg-cli postgresql create-alert-rule -hsg-cli postgresql create-alert-rule --cluster-name test2 --type metric --operator gt --threshold 80 --notifications email --metric cpu_total --duration six{
"alertRuleDescription": "CPU - Total (%) greater than 80%",
"averageType": "SIX",
"clusterId": 24,
"created": "2022-01-24 08:21:00.092000",
"databaseType": "POSTGRESQL",
"enabled": true,
"id": 1,
"metric": "CPU_TOTAL",
"notifications": [
"EMAIL"
],
"operator": "GT",
"ruleMetricName": "CPU - Total (%)",
"threshold": 80.0,
"cloudType": "METRIC"
}
Alert rule created successfully
Alert Rule ID: 1list-alert-rule
List all the alert-rules for the cluster
sg-cli postgresql list-alert-rules -hsg-cli postgresql list-alert-rules --cluster-name test2{
"alertRuleDescription": "CPU - Total (%) greater than 80%",
"averageType": "SIX",
"clusterId": 24,
"created": "2022-01-24 08:21:00",
"databaseType": "POSTGRESQL",
"enabled": true,
"id": 1,
"metric": "CPU_TOTAL",
"notifications": [
"EMAIL"
],
"operator": "GT",
"ruleMetricName": "CPU - Total (%)",
"threshold": 80.0,
"cloudType": "METRIC"
}delete-alert-rule
Delete a cluster-alert-rule
sg-cli postgresql delete-alert-rule -hsg-cli delete-alert-rule --alert-rule-id 1Alert rule deleted successfullyget-active-alerts
Get all active alerts on a particular cluster
sg-cli postgresql get-active-alerts -hsg-cli postgresql get-active-alerts --cluster-name test2{
"alertDescription": "CPU - Total (%) went below 80%",
"clusterID": 24,
"created": "2022-01-24 08:30:10",
"dismissComment": null,
"dismissedDate": null,
"id": 1,
"machineName": "SG-test2-70.devservers.scalegrid.io",
"state": "ACTIVE",
"userAlertRuleId": 3
}resolve-alerts
Dismiss alerts for a particular cluster
sg-cli postgresql resolve-alerts -hsg-cli postgresql resolve-alerts --cluster-name test2 --alert-id-list 1Alerts resolved successfullysetup-follower
Setup follower relationship between two clusters such that the target-cluster syncs from the source-cluster periodically. If a relationship already exists, you can use this function to change the import schedule.
sg-cli postgresql setup-follower -hsg-cli postgresql setup-follower --source-cluster test2 --target-cluster follower --start-hour 23 --interval 2Follower relationship between clusters follower and test2 created successfullysync-follower
Syncs a follower cluster on-demand, from its source. This operation will overwrite all data on the target cluster with the latest backup from the source cluster.
sg-cli postgresql sync-follower -hsg-cli postgresql sync-follower --target-cluster followerFollower cluster sync started successfully
Action ID: 5082
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5082get-follower-status
To get the details of the follower relationship of the target cluster
sg-cli postgresql get-follower-status -hsg-cli postgresql get-follower-status --target-cluster follower{
"destinationCluster": {
"name": "follower",
"id": 25,
"status": "Refreshing",
"size": "Micro",
"clusterType": "Standalone",
"diskSizeGB": 10,
"usedDiskSizeGB": 1,
"encryptionEnabled": false,
"sslEnabled": false
},
"sourceCluster": {
"name": "test",
"id": 24,
"status": "Updating",
"size": "Micro",
"clusterType": "Standalone",
"diskSizeGB": 10,
"usedDiskSizeGB": 1,
"encryptionEnabled": false,
"sslEnabled": false
},
"syncSchedule": {
"intervalInHours": 2,
"jobType": "PostgreSQLSyncFollowerWithSourceCluster",
"nextRuntime": 1643054400000
}
}stop-following
To get the details of the follower relationship of the target cluster
sg-cli postgresql stop-following -hsg-cli postgresql stop-following --target-cluster followerFollower relationship broken successfullyset-pgbouncer
To enable/disable connection pooling by PgBouncer on your PostgreSQL cluster.
sg-cli postgresql set-pgbouncer -hsg-cli postgresql set-pgbouncer --cluster-name test2 --pool-mode statement --pool-size 70 --max-client-connections 100 --max-db-connections 100 --max-user-connections 200Enabling PgBouncer
Action ID: 5101
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5101sg-cli postgresql set-pgbouncer --cluster-name test2 --disableDisabling PgBouncer
Use your action ID to monitor the job status.
Action ID: 5102get-pgbouncer-config
To get the current pgBouncer config details
sg-cli postgresql get-pgbouncer-config -hsg-cli postgresql get-pgbouncer-config --cluster-name test2{
"settings": {
"max_db_connections": "0",
"max_user_connections": "0",
"max_client_connections": "100",
"pool_mode": "session",
"pool_size": "20"
}
}modify-pgbouncer-config
To modify the current PgBouncer config details
sg-cli postgresql modify-pgbouncer-config -hsg-cli postgresql modify-pgbouncer-config --cluster-name test --pool-mode statement --pool-size 30 --max-client-connections 150 --max-db-connections 200 --max-user-connections 300Modifying PgBouncer Configuration
Action ID: 5102
To track whether your action has completed, run:
sg-cli wait-until-job-done --action-id 5102check-job-status
Check the job status using action-id
sg-cli check-job-status -hsg-cli check-job-status --action-id 5134{
"name": "Patch operating system",
"object_name": "test",
"object_type": "PostgreSQLCluster",
"cancelled": false,
"progress": 100,
"status": "Completed",
"run_by": "[email protected]"
}wait-until-job-done
Wait until a job is done using action-id
sg-cli wait-until-job-done -hsg-cli wait-until-job-done --action-id 5135Waiting...
DoneUpdated 5 months ago
