![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Rocky |
![]()
Сообщение
#1
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
Всем привет!
Пытаюсь создать таблицу в PostgreSQL и одно из полей сделать PK. Пробую так:
Пробовал через sequence:
Как я понял, в постгрессе нету AUTOINCREMENT... Вобщем, никак не работает... (( Кто-нибудь знает в чем может быть проблема? Спасибо) Сообщение отредактировал Rocky - 4.3.2010, 17:10 |
|
|
DEADHUNT |
![]()
Сообщение
#2
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Есть в PostgreSQL понятие "Генератор"?
Если есть, то тогда точно, как в InterBase/Firebird - Генератор+Тригер |
|
|
DEADHUNT |
![]()
Сообщение
#4
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 430 Регистрация: 15.4.2009 Пользователь №: 686 Спасибо сказали: 26 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Rocky |
![]()
Сообщение
#5
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
А можно маленький примерчик плиз? Я просто вот только-только взялся по-серьезному за базы данных =)
|
|
|
MoPDoBoPoT |
![]()
Сообщение
#6
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
Как я понял, в постгрессе нету AUTOINCREMENT Неправильно понял, точнее наделал ошибок и сделал неправильный вывод. В PostgreSQL автоинкрементное поле осуществляется через тип SERIAL/BIGSERIAL (по сути это последовательность + "триггер"). В общем, по порядку: 1.
Я не понял эту конструкцию, так что создалась таблица? 2.
Тут запрос неправильный, т.к. в таблице tab 4 поля, а не 3. Текст должен быть примерно такой: "INSERT INTO tab(Pict_ID_1_1, Pict_ID_1_2, Pict_ID_1_3) VALUES(:Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3);" 3.
Тут ты пытаешься в 1-е поле с числовым типом записать текстовую строку "tab_sq.nextval" (тем более в описании таблцы уже задан автоикремент). 4. oQuery.bindValue(":Pict_ID_1_1", 1); oQuery.bindValue(":Pict_ID_2_1", 2); oQuery.bindValue(":Pict_ID_3_1", 3); А в подготовленном запросе писал :Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3 Вот попробуй так:
Сообщение отредактировал MoPDoBoPoT - 4.3.2010, 17:44 |
|
|
Rocky |
![]()
Сообщение
#7
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
Ого )
1. AUTOINCREMENT я имел ввиду именно ключевое слово, SERIAL я потом прочитал что это аналог этому AUTOINCREMENT... Ну да, таблица создалась )) А что в ней не так? 2. Блин, понял ( Я чето решил что из-за явного указания имен полей модуль QtSql при формировании запроса сам подставит по полям что куда нужно.. 3. Упс, тут описался, на самом деле было так (просто за 3 часа уже устал туда-сюда все менять, вот не то и вписал под конец)
4. там все ок, просто у меня 32 поля, я все тут не стал писать ( Уря, заработало!!! Тока в консоли пишет: Цитата NOTICE: CREATE TABLE will create implicit sequence "tab_id_seq" for serial column "tab.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tab_pk" for table "tab" Это ничего страшного? Сообщение отредактировал Rocky - 4.3.2010, 18:19 |
|
|
MoPDoBoPoT |
![]()
Сообщение
#8
|
Участник ![]() ![]() Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Rocky |
![]()
Сообщение
#9
|
Старейший участник ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 530 Регистрация: 22.12.2008 Из: Санкт-Петербург Пользователь №: 463 Спасибо сказали: 22 раз(а) Репутация: ![]() ![]() ![]() |
А еще вопросик можно? А при указании имен столбцов в QSqlQuery::prepare важен порядок имен столбцов? Т.е. он должен быть такой же как и при создании таблицы, или без разницы?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
PK прибавить 1 и это будет новый PK. нет нельзя, т.к. могут существовать разные транзакции и значение может быть не уникальным. А генератор гарантирует уникальностьВо всяком случае в firebird/interbase, т.к. они версионники, а не блокировочники (как, например, MySQL) в QSqlQuery::prepare важен порядок имен столбцов? Т.е. он должен быть такой же как и при создании таблицы, или без разницы? зависит от типа подстановки, позиционная/именованная.Для последней без разницы, подробности см. в описании класса |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 13:13 |