Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Perl + Postgresql: вставка данных в таблицу

10K
25 января 2012 года
trinitro
48 / / 14.06.2010
Разбираюсь с взаимодействием Perl и PostgreSQL через Pg.pm.

При использовании такого кода добавление в таблицу не происходит (смотрю результат PgAdmin'ом):

 
Код:
use strict;
use Pg;


my $acc = "host=127.0.0.1 dbname=mydb user=postgres password=12345";
my $conacc = Pg::connectdb($acc);


my $qry = "INSERT INTO cities2 VALUES ('Moscow', '(-128.0,45.1)')";
my $res = $conacc -> exec($qry);


Хотя выборка из других таблиц проходит нормально (если соответственно заменить INSERT... на SELECT)

Помогите пожалуйста разобраться!
277
25 января 2012 года
arrjj
1.7K / / 26.01.2011
А что в $conacc->errorMessage и $conacc->resultStatus?
И покажи структуру таблички cities2
10K
25 января 2012 года
trinitro
48 / / 14.06.2010
Структура таблицы:

id integer NOT NULL,
name character varying(80),
location point,
CONSTRAINT cities2_pkey PRIMARY KEY (id )
277
25 января 2012 года
arrjj
1.7K / / 26.01.2011
Ну так структура одна а запрос другой))
Либо
"INSERT INTO cities2 (name,location) VALUES ('Moscow', '(-128.0,45.1)')"
,что скорее всего не сработает
либо
"INSERT INTO cities2 VALUES (идзаписи,'Moscow', '(-128.0,45.1)')"
идзаписи можно генерировать с помощью pg-шных SEQUENCE и в запросе вместо явного указания идзаписи указывать nextval(нужная-SEQUENCE)
10K
25 января 2012 года
trinitro
48 / / 14.06.2010
Спасибо большое! Второй вариант сработал в таком виде:

 
Код:
"INSERT INTO cities2 VALUES (1, 'Moscow', '(-128.0,45.1)')"


(в MySQL для этого можно указать 'Auto_Increment', а PostgreSQL поругался на этот параметр при создании базы)

Как сделать чтобы при вставке id генерелся и вставлялся автоматом?

идзаписи можно генерировать с помощью pg-шных SEQUENCE и в запросе вместо явного указания идзаписи указывать nextval(нужная-SEQUENCE)

Цитата:
идзаписи можно генерировать с помощью pg-шных SEQUENCE и в запросе вместо явного указания идзаписи указывать nextval(нужная-SEQUENCE)

можно хотя бы маленький пример?

277
25 января 2012 года
arrjj
1.7K / / 26.01.2011
 
Код:
CREATE SEQUENCE foo_seq;
CREATE TABLE foo (
id INTEGER NOT NULL DEFAULT NEXTVAL('foo_seq'),
...,
PRIMARY KEY (id)
);

Либо если без модификации таблиц просто создаешь CREATE SEQUENCE foo_seq; и вставляешь в таблицу "INSERT INTO cities2 VALUES (NEXTVAL('foo_seq'), 'Moscow', '(-128.0,45.1)')"
10K
26 января 2012 года
trinitro
48 / / 14.06.2010
Цитата: arrjj
 
Код:
CREATE SEQUENCE foo_seq;
CREATE TABLE foo (
id INTEGER NOT NULL DEFAULT NEXTVAL('foo_seq'),
...,
PRIMARY KEY (id)
);



А вот запрос (выполненный через Query из Pgadmin'a):
"INSERT INTO cities2 VALUES (NEXTVAL('foo_seq'), 'Moscow', '(-128.0,45.1)')"

Даёт ошибку:

 
Код:
ERROR:  value too long for type character(1)


********** Ошибка **********

ERROR: value too long for type character(1)
SQL-состояние: 22001
10K
27 января 2012 года
trinitro
48 / / 14.06.2010
Разобрался чтобы был автоинкремент ключа, таблицу надо создать так:

 
Код:
CREATE SEQUENCE cities2_seq;
CREATE TABLE cities2
(
  id integer NOT NULL UNIQUE DEFAULT nextval('cities2_seq'),
  name character varying(80),
  location point,
  CONSTRAINT cities2_pkey PRIMARY KEY (id )
)


Запрос соответственно, например так:

 
Код:
INSERT INTO cities2 (name,location) VALUES ('London', '(-100.0, 5.9)')


Выражаю благодарность тов. "arrjj'у", тема закрыта
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог