2016-07-15 6 views
0

У меня есть таблица под названием SEQ_TABLE, который имеет две колонки, SEQ_NAME и IDВставка в таблицу, получая NEXTVAL последовательности в PostgreSQL

SEQ_NAME  | ID 
---------------------- 
SEQ_TABLE_10 | 1 
SEQ_TABLE_20 | 5 

Где ID является Макс из COLUMN_1 из TABLE_10 и TABLE_20

сейчас , Я должен вставить новые записи в TABLE_10, получив nextvalue последовательности от SEQ_TABLE.

Я написал PostgreSQL запрос следующим образом:

INSERT INTO TABLE_10 (COLUMN_1, COLUMN_2, COLUMN_3) VALUES ((SELECT nextval(SEQ_TABLE)), 'Bangalore' ,NULL); 

Когда я исполняю выше запрос, он дает ниже сообщение об ошибке: ********** ******* Ошибка ***

ERROR: column "SEQ_TABLE_10" does not exist 
SQL state: 42703 
Character: 99 

Но после запроса отлично работает в MySQL базы данных:

INSERT INTO TABLE_TABLE(COLUMN_1, COLUMN_2, COLUMN_3) VALUES ((SELECT nextval('TABLE_172_SEQ','true')), 'Bangalore' ,NULL); 

Что такое точный запрос Postgres для его достижения в PostgreSQL DB?

+0

MySQL не поддерживает последовательности в отличие от Postgres. Таким образом, это означает, что следующая функция, которую вы используете в MySQL, может быть не встроенной функцией из MySQL. Можете ли вы проверить, есть ли какая-либо пользовательская функция, названная nextval в базе данных MySQL?Если вы получите эту функцию, вы можете просто скопировать функцию в базу данных Postgres и использовать ее или лучше перейти к созданию последовательности, как указано в ответе от @apm – Manish

+0

@Manish: MySQL работает нормально. Проблема с Postgres – Satish

+2

You возможно, неправильно понял мой комментарий. Я имел в виду, что MySQL не имеет последовательности и, следовательно, нет возможности использовать nextval fuction в нем. Но у вас есть вызов функции nextval, используемый в MySQL. Я подозреваю, что nextval fucntion, который вы используете в MySQL, может быть пользовательской функцией. Можете ли вы проверить, есть ли у вас какая-либо пользовательская функция, называемая «nextVal» в вашей базе данных MySQL? – Manish

ответ

0

Вы хотите создать последовательность, а не таблица (SEQ_TABLE) Просьба передать этот ссылку https://www.postgresql.org/docs/8.1/static/sql-createsequence.html

Е.Г..

CREATE SEQUENCE serial START 101; 
SELECT nextval('serial'); 
create table MyTable(col1 int,col2 varchar(20)); 
INSERT INTO MyTable VALUES (nextval('serial'), 'nothing'); 
0

В PostgreSQL вы бы использовать

CREATE TABLE table_10 (id serial PRIMARY KEY, other text NOT NULL); 

Тогда id имеет тип integer, последовательность table_10_id_seq создается и nextval вызов добавляется к статье о id колонке DEFAULT.

Вы можете проверить это с \d в psql:

\d table_10 
         Table "laurenz.table_10" 
Column | Type |      Modifiers 
--------+---------+------------------------------------------------------- 
id  | integer | not null default nextval('table_10_id_seq'::regclass) 
other | text | not null 
Indexes: 
    "table_10_pkey" PRIMARY KEY, btree (id) 

Кроме того, столбец принадлежит к столу и будут сброшены автоматически, когда таблица удаляется.

Вы вставляете строки опуская id колонки, как это:

INSERT INTO table_10 (other) VALUES ('something'); 

Тогда будут использоваться DEFAULT значения.

Если вы хотите сделать то же самое “ ” пешком, например, чтобы использовать другое имя или различные начальные значения для последовательности, которая будет работать так:

CREATE TABLE table_10 (id integer PRIMARY KEY, other text NOT NULL); 
CREATE SEQUENCE table_10_id_seq OWNED BY table_10.id; 
ALTER TABLE table_10 ALTER id SET DEFAULT nextval('table_10_id_seq'); 
Смежные вопросы