У меня есть таблица с учетными записями, учетные записи могут иметь различное количество учетных данных, и имя учетных данных может меняться.Мой подход к этой проблеме состоял в том, чтобы создать связь между учетными записями и ключами, одна учетная запись может иметь много ключей.Я использовал key_name для хранения имени ключа и key_value для хранения значения ключа.У меня проблемы с поворотом таблицы ключей в Postgres.Microsoft упростила поворот с помощью функции PIVOT.Теперь с postgres это кажется сложным.Для того, что я помню
table table
accounts | keys
id store_id | account_id key_name key_value
1 1 | 1 'api_key' 'api_key_value1'
2 2 | 1 'password' 'pass'
| 2 'account_manager' 'er3re'
| 2 'api_key' 'er34554re'
| 2 'user_email', 'example@example.com'
Чтобы иметь представление о своих намерениях, я хочу создать что-то вроде этого, это всего лишь пример.Меня больше беспокоит запрос в posgres, а не в формате json.
{
"accounts": [
{
"store_id": 1,
"keys": [
{
"account_id" : 1,
"api_key": "api_key_value1",
"password": "pass"
}
]
},
"store_id" : 2,
"keys" : [
{
"account_id" : 2,
"account_manager" : "er3re"
"api_key": "er34554re",
"user_email": "example@example.com"
}
]
]
}
В приведенном выше json хранилище с идентификатором 2 имеет 3 "ключа", а хранилище с идентификатором 1 - только 2. Я хочуне добавляйте ключи непосредственно в таблицу учетных записей.
Я использовал функцию crosstab () и, кажется, хорошо, если не решаю проблему реального мира.
select * from crosstab('select account_id, key_name, key_value from keys order by 1,2') as final_result("account_id" int, key_name char(30), key_value char(30))
С помощью этой функции я теперь должен узнать, сколько ключей у каждой учетной записи есть, что этоодна из моих проблем.Исправьте, если я ошибаюсь в функции кросс-таблицы.