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);
Perl + Postgresql: вставка данных в таблицу
При использовании такого кода добавление в таблицу не происходит (смотрю результат PgAdmin'ом):
Код:
Хотя выборка из других таблиц проходит нормально (если соответственно заменить INSERT... на SELECT)
Помогите пожалуйста разобраться!
И покажи структуру таблички cities2
id integer NOT NULL,
name character varying(80),
location point,
CONSTRAINT cities2_pkey PRIMARY KEY (id )
Либо
"INSERT INTO cities2 (name,location) VALUES ('Moscow', '(-128.0,45.1)')"
,что скорее всего не сработает
либо
"INSERT INTO cities2 VALUES (идзаписи,'Moscow', '(-128.0,45.1)')"
идзаписи можно генерировать с помощью pg-шных SEQUENCE и в запросе вместо явного указания идзаписи указывать nextval(нужная-SEQUENCE)
Код:
"INSERT INTO cities2 VALUES (1, 'Moscow', '(-128.0,45.1)')"
(в MySQL для этого можно указать 'Auto_Increment', а PostgreSQL поругался на этот параметр при создании базы)
Как сделать чтобы при вставке id генерелся и вставлялся автоматом?
идзаписи можно генерировать с помощью pg-шных SEQUENCE и в запросе вместо явного указания идзаписи указывать nextval(нужная-SEQUENCE)
Цитата:
идзаписи можно генерировать с помощью pg-шных SEQUENCE и в запросе вместо явного указания идзаписи указывать nextval(нужная-SEQUENCE)
можно хотя бы маленький пример?
Код:
CREATE SEQUENCE foo_seq;
CREATE TABLE foo (
id INTEGER NOT NULL DEFAULT NEXTVAL('foo_seq'),
...,
PRIMARY KEY (id)
);
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)')"
Цитата: arrjj
Код:
CREATE SEQUENCE foo_seq;
CREATE TABLE foo (
id INTEGER NOT NULL DEFAULT NEXTVAL('foo_seq'),
...,
PRIMARY KEY (id)
);
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
********** Ошибка **********
ERROR: value too long for type character(1)
SQL-состояние: 22001
Код:
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 )
)
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'у", тема закрыта