sql >> Database >  >> RDS >> PostgreSQL

postgresql misvormde array letterlijk in create aggregaat initcond

Je hebt aanhalingstekens nodig rond je arrays, en dat komt omdat de array in een tekstversie van een rij staat.

Eenvoudig te testen door uw invoer als een rij te nemen en te zien hoe Postgres deze opmaakt (enkele aanhalingstekens zijn hier nodig rond arrays omdat {} is een array in tekst):

SELECT ROW(0,NULL,NULL, 0, 0, 0, 0, '{}', '{1,2,3,4,5}', '{1,2,3,4,5}', '{0,0.25,0.5,0.75,1}')

Retourneren:

(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")

Daarom moet u het volgende doen:

...
initcond = '(0,,,0,0,0,0,{},"{1,2,3,4,5}","{1,2,3,4,5}","{0,0.25,0.5,0.75,1}")'

Waarom aanhalingstekens niet nodig zijn in een array die leeg is of maar één waarde heeft:

Meerdere waarden in een array zijn door komma's gescheiden en velden binnen een rij zijn ook door komma's gescheiden. Als u een rij opgeeft als '(0,{1,2})' , zal PG dit interpreteren als drie velden:0 , {1 , 2} . Natuurlijk krijg je in dat geval een foutmelding over een misvormde array. Een veld tussen aanhalingstekens plaatsen betekent dat alles binnen die aanhalingstekens één veld is. Daarom '(0,"{1,2}")' wordt correct geïnterpreteerd als 0 , {1,2} . Als de array leeg is of slechts één waarde bevat, is er geen komma, dus het is geen probleem om dat veld correct te ontleden.




  1. Array invoegen in postgresql

  2. InnoDB:kan ./ibdata1-fout niet vergrendelen:35

  3. Oracle Datumnotatie-uitzondering in SQL Server Reporting Services

  4. selecteer alle records die binnen het uur zijn gemaakt