У меня есть таблица, которая выглядит примерно так:
create table if not exists gameTemplate00.construction (
player uuid constraint "[construction] Player foreign key"
references gameTemplate00.player(id),
colony uuid constraint "[construction] Colony foreign key"
references gameTemplate00.colony(id),
location text, -- All subcolonies at this location contribute to production
investment uint8 default 0 not null,
cost uint8 not null,
history uint8[3] default '{null,null,null}' not null,
priority uint2,
allocation allocation not null,
repeat boolean default false not null,
dispatch text, -- what to do with the vessel once complete
project text, -- free form name for player, can be null
constraint "[construction] Priority must be unique for a given subcolony"
unique(colony, location, priority)
);
Когда я запрашиваю ее и получаю результаты от Knex с помощью:
db('construction')
.withSchema('gametemplate00')
.where('colony', payload.colony)
.where('location', payload.location)
.then((constructionListResult: any) => {
ws.send(JSON.stringify(constructionListResult));
console.log(constructionListResult);
})
Она возвращает это :
{
player: '5f43f33b-dba6-43ca-bc0c-0516e5d29968',
investment: '0',
cost: '1000',
history: '{NULL,NULL,NULL}',
priority: '4',
allocation: { kind: 'percent', amount: 0.35 },
repeat: false,
dispatch: null,
project: 'whenever'
}
Распределение является доменом jsonb, и оно правильно распознает его и создает для него объект json. Но массив разбивается и отображается в виде строки.
Это потому, что у меня что-то неправильно настроено в Knex, или он вообще не распознает postgresql столбцы массива? Это наименее проблематичный пример для меня, но для других это станет настоящей болью, когда придется разбирать их самому.