Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/4211.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/tencentcloud_postgresql_account: supports pagination
```
50 changes: 37 additions & 13 deletions tencentcloud/services/postgresql/service_tencentcloud_postgresql.go
Original file line number Diff line number Diff line change
Expand Up @@ -2131,30 +2131,54 @@ func (me *PostgresqlService) DescribePostgresqlAccountById(ctx context.Context,
request := postgresql.NewDescribeAccountsRequest()
request.DBInstanceId = &dBInstanceId

// Set to max limit of 100 to reduce total API calls required
var limit int64 = 100
var offset int64 = 0
request.Limit = &limit

defer func() {
if errRet != nil {
log.Printf("[CRITAL]%s api[%s] fail, request body [%s], reason[%s]\n", logId, request.GetAction(), request.ToJsonString(), errRet.Error())
}
}()

ratelimit.Check(request.GetAction())
for {
request.Offset = &offset
ratelimit.Check(request.GetAction())

response, err := me.client.UsePostgresqlClient().DescribeAccounts(request)
if err != nil {
errRet = err
return
}
response, err := me.client.UsePostgresqlClient().DescribeAccounts(request)
if err != nil {
errRet = err
return
}

log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())
log.Printf("[DEBUG]%s api[%s] success, request body [%s], response body [%s]\n", logId, request.GetAction(), request.ToJsonString(), response.ToJsonString())

if response == nil || len(response.Response.Details) < 1 {
return
}
if response == nil || len(response.Response.Details) < 1 {
return
}

for _, item := range response.Response.Details {
if item.UserName != nil && *item.UserName == userName {
account = item
return
}
}

for _, item := range response.Response.Details {
if *item.UserName == userName {
account = item
// Both condition checks if we hit the total count
// with additional fallback check if TotalCount somehow becomes nil
if response.Response.TotalCount != nil {
totalCount := *response.Response.TotalCount
if totalCount == 0 || offset+int64(len(response.Response.Details)) >= totalCount {
break
}
} else {
if int64(len(response.Response.Details)) < limit {
break
}
}

offset += limit
}

return
Expand Down
Loading