powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / передача двумерного массива из codeigniter в PostgreSQL
8 сообщений из 8, страница 1 из 1
передача двумерного массива из codeigniter в PostgreSQL
    #39335307
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет,
В codeigniter 3.1.0 средством pg_query вызываю PostgreSQL 9.3 функцию с передачей двумерного массива
Код: plsql
1.
2.
3.
4.
5.
6.
Array
(
    [1] => 18
    [5] => 20
    [3] => 333333
)

где ключи это целое а значение может быть целое или строка



Я передал это все как двумерный массив строк
Код: plsql
1.
select * from funcname( ARRAY [ ARRAY[ '1','18' ], ARRAY[ '5','20' ], ARRAY[ '3','333333' ] ] )



и принимаю как массив в цикле
Код: plsql
1.
2.
3.
4.
5.
create or replace function funcname( IN p_attributes_list varchar(255)[][]  ) returns int as
...
   FOREACH next_attribute_value IN ARRAY p_attribute_list
...
   LOOP


я получаю 6 значений next_attribute_value из массива, а не 3 пары ключ=>значения как хотелось бы ...
А как правильно и можно ли передать ассоциативный массив и если да, то как и как его обработать на сервере?

Нашел возможность задать цикл с шагом:
Код: plsql
1.
2.
3.
FOR i IN REVERSE 10..1 BY 2 LOOP
    -- i will take on the values 10,8,6,4,2 within the loop
END LOOP;



который можно приспособить у моей задаче - но не уверен лучшее ли это решение
и нет ли возможности передать ассоциативный массив - c ним было бы легче работать?

Спасибо!
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39335344
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mstdmstd,

для набора пар "ключ--значение" существует hstore. т.е вы всё время мимо тазика метите.

а так то -- для многомерных массивов есть словцо "SLICE"
Код: sql
1.
2.
3.
4.
[ <<label>> ]
FOREACH target [ SLICE number ] IN ARRAY expression LOOP
    statements
END LOOP [ label ];



RTFM
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39335926
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, я на хабе почитал про hstore, но там как задать таблицу с полем hstore и читать/писать эти данные.
А как задать вызов функции в строковом представлении чтобы один из параметров был массив hstore ?
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39336268
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для хранения лучше jsonb, он и hstore хорошо поедает.
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39336291
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
select to_jsonb(t) from (SELECT 123 as ds2,  ARRAY [ ARRAY[ '1','18' ], ARRAY[ '5','20' ], ARRAY[ '3','333333' ] ] as ds2, '123df' as ds2_pr, '2016-05-01' as naz_pk) t
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39336988
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При попытке создать поле с типом данных "jsonb" или "hstore" я получил ошибки

Код: sql
1.
2.
3.
ERROR: type "jsonb" does not exist LINE 8: attributes_data jsonb,
ERROR: type "hstore" does not exist LINE 8: attributes_data hstore,
[SRC PLSQL]


server_version 9.3.14[/SRC]

Гуглом нашел что jsonb работает с 9.2 а jsonb еще в 8 работал...
У меня не установлены какие-то пакеты ? Или нужно обновить до более высокой версии и до какой?
И как правильно обновить систему?

Код: xml
1.
2.
3.
4.
lsb_release -d; uname -r; uname -i 
Description: Ubuntu 16.04.1 LTS 
4.4.0-45-generic 
x86_64
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39337009
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mstdmstd,

`jsonb` появился только в 9.4.
`json` в 9.3 доступен.
`hstore` — через расширение.

Лучше всего смотреть официальную документацию для своей версии.
...
Рейтинг: 0 / 0
передача двумерного массива из codeigniter в PostgreSQL
    #39342754
mstdmstd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Читаю статью https://habrahabr.ru/post/254425/
и пробую в вызове функции передать массив данных а поле jsondb(последний параметр):
Код: plsql
1.
select * from pd_update_product( 0, 'Product title_2016-11-07 11:54:17', 'A', 'sku_2016-11-07 11:54:17', 165, 98.76, 65.32, TRUE, 'short_description_2016-11-07 11:54:17', 'description_2016-11-07 11:54:17', TRUE, TRUE, TRUE, ARRAY[]::integer[], ARRAY[]::integer[], '{"a": 1, "b": {"c": "d", "e": true}}' );



И получаю ошибку
Код: plsql
1.
2.
3.
4.
5.
6.
SQL Error [22P02]: ERROR: malformed array literal: "{"a": 1, "b": {"c": "d", "e": true}}"
  Detail: Unexpected array element.
  Position: 265
  org.postgresql.util.PSQLException: ERROR: malformed array literal: "{"a": 1, "b": {"c": "d", "e": true}}"
  Detail: Unexpected array element.
  Position: 265



Или при вызове функции формат другой?
И какой тип должен иметь этот параметр в определении функции если это двумерный массив?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / передача двумерного массива из codeigniter в PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]