|
Масиви в PostgreSQL
PostgreSQL дава възможност на потребителя да дефинира полета от таблиците като многомерни масиви, които от своя страна да са от основен или потребителски дефиниран тип. Масивите от съставен (сложен) тип все още не са имплементирани. Дефинирането на колона като масив става като прибавим по чифт квадратни скоби ( [] ) за всяко измерение на масива след типа на колоната. Така например конструкцията: CODE
ще създаде таблица с колона place от тип text, колона temperatures, която ще е едномерен масив от числа с плаваща запетая и колона wind – двумерен масив от тип text. Така в тази таблица ще можем да съхраняваме названието на местото, където са извършени замерванията, измерените температури и данни за вятъра – посока и сила. При нужда да се зададе ограничение на дължината на масивите е достатъчно да се добави желаната дължина между квадратните скоби, например: CODE
Друг начин е trite_imena text ARRAY[3] , но този синтаксис изисква задължително да се укаже дължина на масива. Въвеждането на данни в колона-масив става като масивите се ограждат с { }. Например, за да въведем данни в таблицата за времето трябва да изпълним следната заявка: CODE
В резултат на този етап би трябвало да имаме следната таблица: place | temperature | wind ---------------+-------------------+----------------------------------------------------- Saint-Etienne | {2,1,0.5,-0.2,-1} | {{NE,weak},{NE,medium},{0,0},{N,medium},{N,strong}} Достъпът до масиви в PostgreSQL бази данни наподобява по конструкция този в голяма част от езиците за програмиране. Нека да добавим още един запис в таблицата за времето и да се опитаме да направим заявка в която условието ще е поставено върху елемент от масив: CODE
За да видим местата където при първото измерване температурите са били положителни ще изпълним следната заявка: CODE
В PostgreSQL масив от n елемента започва с 1 и завършва с n, затова не се учудвайте, че не извикваме първия елемент с 0, а с 1. От показания по-горе начин за достъп до елементи от колони-масиви и от факта, че SQL е алгебричен език можем да се досетим, че е възможна заявка, която да ни покаже стойностите на даден елемент от масив за всички редове на таблицата. Например: SELECT temperature[3] FROM weather; ще ни даде: temperature 0.5 -1.5 което са температурите при третото засичане за всички редове в таблицата. Можем също така да използваме отрязъци от масиви и суб-масиви. Забележете, че не е нужно да посочваме дълбочината на масива в заявката ако не искаме точно определен отрязък от суб-масива. В този пример извличаме данните за вятъра в Tarare при измервания от 3 до 5: CODE
Ако не се интересуваме от силата, а само от посоката на вятъра, можем да формулираме заявката така: CODE
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









