0

Update the Database Configuration for an Existing Database

by
Published Dec 20, 2024

To update the configuration for an existing database cluster, send a PATCH request to `/v2/databases/$DATABASE_ID/config`.

Script digitalocean Verified

The script

Submitted by hugo697 Bun
Verified 536 days ago
1
//native
2
type Digitalocean = {
3
  token: string;
4
};
5
/**
6
 * Update the Database Configuration for an Existing Database
7
 * To update the configuration for an existing database cluster, send a PATCH request to
8
`/v2/databases/$DATABASE_ID/config`.
9

10
 */
11
export async function main(
12
  auth: Digitalocean,
13
  database_cluster_uuid: string,
14
  body: {
15
    config?:
16
      | {
17
          backup_hour?: number;
18
          backup_minute?: number;
19
          sql_mode?: string;
20
          connect_timeout?: number;
21
          default_time_zone?: string;
22
          group_concat_max_len?: number;
23
          information_schema_stats_expiry?: number;
24
          innodb_ft_min_token_size?: number;
25
          innodb_ft_server_stopword_table?: string;
26
          innodb_lock_wait_timeout?: number;
27
          innodb_log_buffer_size?: number;
28
          innodb_online_alter_log_max_size?: number;
29
          innodb_print_all_deadlocks?: false | true;
30
          innodb_rollback_on_timeout?: false | true;
31
          interactive_timeout?: number;
32
          internal_tmp_mem_storage_engine?: "TempTable" | "MEMORY";
33
          net_read_timeout?: number;
34
          net_write_timeout?: number;
35
          sql_require_primary_key?: false | true;
36
          wait_timeout?: number;
37
          max_allowed_packet?: number;
38
          max_heap_table_size?: number;
39
          sort_buffer_size?: number;
40
          tmp_table_size?: number;
41
          slow_query_log?: false | true;
42
          long_query_time?: number;
43
          binlog_retention_period?: number;
44
          innodb_change_buffer_max_size?: number;
45
          innodb_flush_neighbors?: 0 | 1 | 2;
46
          innodb_read_io_threads?: number;
47
          innodb_write_io_threads?: number;
48
          innodb_thread_concurrency?: number;
49
          net_buffer_length?: number;
50
          log_output?: "INSIGHTS" | "TABLE" | "INSIGHTS,TABLE" | "NONE";
51
        }
52
      | {
53
          autovacuum_freeze_max_age?: number;
54
          autovacuum_max_workers?: number;
55
          autovacuum_naptime?: number;
56
          autovacuum_vacuum_threshold?: number;
57
          autovacuum_analyze_threshold?: number;
58
          autovacuum_vacuum_scale_factor?: number;
59
          autovacuum_analyze_scale_factor?: number;
60
          autovacuum_vacuum_cost_delay?: number;
61
          autovacuum_vacuum_cost_limit?: number;
62
          backup_hour?: number;
63
          backup_minute?: number;
64
          bgwriter_delay?: number;
65
          bgwriter_flush_after?: number;
66
          bgwriter_lru_maxpages?: number;
67
          bgwriter_lru_multiplier?: number;
68
          deadlock_timeout?: number;
69
          default_toast_compression?: "lz4" | "pglz";
70
          idle_in_transaction_session_timeout?: number;
71
          jit?: false | true;
72
          log_autovacuum_min_duration?: number;
73
          log_error_verbosity?: "TERSE" | "DEFAULT" | "VERBOSE";
74
          log_line_prefix?:
75
            | "pid=%p,user=%u,db=%d,app=%a,client=%h"
76
            | "%m [%p] %q[user=%u,db=%d,app=%a]"
77
            | "%t [%p]: [%l-1] user=%u,db=%d,app=%a,client=%h";
78
          log_min_duration_statement?: number;
79
          max_files_per_process?: number;
80
          max_prepared_transactions?: number;
81
          max_pred_locks_per_transaction?: number;
82
          max_locks_per_transaction?: number;
83
          max_stack_depth?: number;
84
          max_standby_archive_delay?: number;
85
          max_standby_streaming_delay?: number;
86
          max_replication_slots?: number;
87
          max_logical_replication_workers?: number;
88
          max_parallel_workers?: number;
89
          max_parallel_workers_per_gather?: number;
90
          max_worker_processes?: number;
91
          "pg_partman_bgw.role"?: string;
92
          "pg_partman_bgw.interval"?: number;
93
          "pg_stat_statements.track"?: "all" | "top" | "none";
94
          temp_file_limit?: number;
95
          timezone?: string;
96
          track_activity_query_size?: number;
97
          track_commit_timestamp?: "off" | "on";
98
          track_functions?: "all" | "none" | "pl";
99
          track_io_timing?: "off" | "on";
100
          max_wal_senders?: number;
101
          wal_sender_timeout?: number;
102
          wal_writer_delay?: number;
103
          shared_buffers_percentage?: number;
104
          pgbouncer?: {
105
            server_reset_query_always?: false | true;
106
            ignore_startup_parameters?: "extra_float_digits" | "search_path"[];
107
            min_pool_size?: number;
108
            server_lifetime?: number;
109
            server_idle_timeout?: number;
110
            autodb_pool_size?: number;
111
            autodb_pool_mode?: "session" | "transaction" | "statement";
112
            autodb_max_db_connections?: number;
113
            autodb_idle_timeout?: number;
114
          };
115
          work_mem?: number;
116
          timescaledb?: { max_background_workers?: number };
117
          synchronous_replication?: "off" | "quorum";
118
          stat_monitor_enable?: false | true;
119
          max_failover_replication_time_lag?: number;
120
        }
121
      | {
122
          redis_maxmemory_policy?:
123
            | "noeviction"
124
            | "allkeys_lru"
125
            | "allkeys_random"
126
            | "volatile_lru"
127
            | "volatile_random"
128
            | "volatile_ttl";
129
          redis_pubsub_client_output_buffer_limit?: number;
130
          redis_number_of_databases?: number;
131
          redis_io_threads?: number;
132
          redis_lfu_log_factor?: number;
133
          redis_lfu_decay_time?: number;
134
          redis_ssl?: false | true;
135
          redis_timeout?: number;
136
          redis_notify_keyspace_events?: string;
137
          redis_persistence?: "off" | "rdb";
138
          redis_acl_channels_default?: "allchannels" | "resetchannels";
139
        }
140
      | {
141
          default_read_concern?: "local" | "available" | "majority";
142
          default_write_concern?: string;
143
          transaction_lifetime_limit_seconds?: number;
144
          slow_op_threshold_ms?: number;
145
          verbosity?: number;
146
        }
147
      | {
148
          compression_type?:
149
            | "lz4"
150
            | "gzip"
151
            | "snappy"
152
            | "zstd"
153
            | "uncompressed"
154
            | "producer";
155
          group_initial_rebalance_delay_ms?: number;
156
          group_min_session_timeout_ms?: number;
157
          group_max_session_timeout_ms?: number;
158
          connections_max_idle_ms?: number;
159
          max_incremental_fetch_session_cache_slots?: number;
160
          message_max_bytes?: number;
161
          offsets_retention_minutes?: number;
162
          log_cleaner_delete_retention_ms?: number;
163
          log_cleaner_min_cleanable_ratio?: number;
164
          log_cleaner_max_compaction_lag_ms?: number;
165
          log_cleaner_min_compaction_lag_ms?: number;
166
          log_cleanup_policy?: "delete" | "compact" | "compact,delete";
167
          log_flush_interval_messages?: number;
168
          log_flush_interval_ms?: number;
169
          log_index_interval_bytes?: number;
170
          log_index_size_max_bytes?: number;
171
          log_message_downconversion_enable?: false | true;
172
          log_message_timestamp_type?: "CreateTime" | "LogAppendTime";
173
          log_message_timestamp_difference_max_ms?: number;
174
          log_preallocate?: false | true;
175
          log_retention_bytes?: number;
176
          log_retention_hours?: number;
177
          log_retention_ms?: number;
178
          log_roll_jitter_ms?: number;
179
          log_roll_ms?: number;
180
          log_segment_bytes?: number;
181
          log_segment_delete_delay_ms?: number;
182
          auto_create_topics_enable?: false | true;
183
          min_insync_replicas?: number;
184
          num_partitions?: number;
185
          default_replication_factor?: number;
186
          replica_fetch_max_bytes?: number;
187
          replica_fetch_response_max_bytes?: number;
188
          max_connections_per_ip?: number;
189
          producer_purgatory_purge_interval_requests?: number;
190
          socket_request_max_bytes?: number;
191
          transaction_state_log_segment_bytes?: number;
192
          transaction_remove_expired_transaction_cleanup_interval_ms?: number;
193
        }
194
      | {
195
          http_max_content_length_bytes?: number;
196
          http_max_header_size_bytes?: number;
197
          http_max_initial_line_length_bytes?: number;
198
          indices_query_bool_max_clause_count?: number;
199
          indices_fielddata_cache_size_percentage?: number;
200
          indices_memory_index_buffer_size_percentage?: number;
201
          indices_memory_min_index_buffer_size_mb?: number;
202
          indices_memory_max_index_buffer_size_mb?: number;
203
          indices_queries_cache_size_percentage?: number;
204
          indices_recovery_max_mb_per_sec?: number;
205
          indices_recovery_max_concurrent_file_chunks?: number;
206
          thread_pool_search_size?: number;
207
          thread_pool_search_throttled_size?: number;
208
          thread_pool_get_size?: number;
209
          thread_pool_analyze_size?: number;
210
          thread_pool_write_size?: number;
211
          thread_pool_force_merge_size?: number;
212
          thread_pool_search_queue_size?: number;
213
          thread_pool_search_throttled_queue_size?: number;
214
          thread_pool_get_queue_size?: number;
215
          thread_pool_analyze_queue_size?: number;
216
          thread_pool_write_queue_size?: number;
217
          ism_enabled?: false | true;
218
          ism_history_enabled?: false | true;
219
          ism_history_max_age_hours?: number;
220
          ism_history_max_docs?: number;
221
          ism_history_rollover_check_period_hours?: number;
222
          ism_history_rollover_retention_period_days?: number;
223
          search_max_buckets?: number;
224
          action_auto_create_index_enabled?: false | true;
225
          enable_security_audit?: false | true;
226
          action_destructive_requires_name?: false | true;
227
          cluster_max_shards_per_node?: number;
228
          override_main_response_version?: false | true;
229
          script_max_compilations_rate?: string;
230
          cluster_routing_allocation_node_concurrent_recoveries?: number;
231
          reindex_remote_whitelist?: string[];
232
          plugins_alerting_filter_by_backend_roles_enabled?: false | true;
233
        };
234
  },
235
) {
236
  const url = new URL(
237
    `https://api.digitalocean.com/v2/databases/${database_cluster_uuid}/config`,
238
  );
239

240
  const response = await fetch(url, {
241
    method: "PATCH",
242
    headers: {
243
      "Content-Type": "application/json",
244
      Authorization: "Bearer " + auth.token,
245
    },
246
    body: JSON.stringify(body),
247
  });
248
  if (!response.ok) {
249
    const text = await response.text();
250
    throw new Error(`${response.status} ${text}`);
251
  }
252
  return await response.json();
253
}
254