Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> auto_increment(MYSQL) w PostgreSQL
DanielBB
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Jak zrobić autonumerowanie w Postgre przy zakładaniu tabeli?
Z góry dzięki.
Go to the top of the page
+Quote Post
kurtz
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 786
Pomógł: 0
Dołączył: 18.03.2002
Skąd: Wroclaw/Warszawa

Ostrzeżenie: (0%)
-----


Hej
Cytat
Jak zrobić autonumerowanie w Postgre przy zakładaniu tabeli?

http://pgsql.spsk1.pl/postgresql-faq.html i odpoweidz nr 16 ;)

Pozdrawiam


--------------------
.. make web your home ..
Go to the top of the page
+Quote Post
DanielBB
post
Post #3





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Wielkie dzieki. Czy do zinicjowania trzeba wpisać wartość początkową id?
Go to the top of the page
+Quote Post
KaMeLeOn
post
Post #4





Grupa: Zarejestrowani
Postów: 680
Pomógł: 0
Dołączył: 1.10.2002
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat
Wielkie dzieki. Czy do zinicjowania trzeba wpisać wartość początkową id?

Nie trzeba...


--------------------
"Czerp z innych, ale nie kopiuj ich. Bądź sobą." Michel Quoist
Go to the top of the page
+Quote Post
DanielBB
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Pytam bo na mySQL wszystko działa mi ok. Klopoty zaczęły się po zmianie przez usługodawce na PostgreSQL 7.2. Mam Komunikat:

Warning: pg_exec() query failed: ERROR: ExecAppend: Fail to add null value in not null attribute id in /home/smpolk/www/ksiegadodaj.php on line 24
blad bazy!
Podobny występuje w MySQL gdy w tworzeniu tabeli nie dałem auto_increment. Według wskazanego Faq'u wstawiłem id serial które powinno odpowiadać autonumeracji jaką miałem w MySQL'u:

[php:1:452692e0a9]
$laczenie=pg_Connect ("host=127.0.0.1 port=5432 dbname=smpolk user=smpolk password=costam");
$zapytanie = "CREATE TABLE wpis ("."id serial,".
"autor char(30),".
"email char (50), ".
"text varchar(255) not null,".
"datawpisu date default '2003-01-01' not null".
")";
$wynik = pg_Exec($laczenie,$zapytanie);
if($wynik) echo "Tabela założona prawidłowo !<br>";
else {
echo "Blad ! Tabela nie została założona !<br>";
}
[/php:1:452692e0a9]

Niestety nie działa. Działający fragment kodu w MySQL:

[php:1:452692e0a9]
mysql_connect("127.0.0.1","","");
$zapytanie = "CREATE DATABASE gosc";
$wynik = mysql_query($zapytanie);
if($wynik) echo "Baza została założona !<br>";
else echo "Baza nie została założona !<br>";
mysql_select_db(gosc);
$zapytanie = "CREATE TABLE wpis ( ".
"id int DEFAULT '0' NOT NULL auto_increment primary key, ".
"autor char(30), ".
"email char (50), ".
"text varchar(255) not null,".
"datawpisu date DEFAULT '0000-00-00' NOT NULL".
")";
$wynik = mysql_query($zapytanie);
if($wynik) echo "Tabela założona prawidłowo !<br>";
else {
echo "Blad ! Tabela nie została założona !<br>";
}
[/php:1:452692e0a9]
Pozdrawiam
Go to the top of the page
+Quote Post
scanner
post
Post #6





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Popraw znaczniki BBCode.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
DanielBB
post
Post #7





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Linijka kodu:
[php:1:0adcb77e62]
$query = "INSERT INTO wpis VALUES(null, '$autor', '$text', ";
[/php:1:0adcb77e62]
dzała na Mysql ponieważ wartość null inicjuje autonumerowanie (wskazuje automatycznie że należy przejść do następnego rekordu w bazie)
Czy w Postgre 'null' trzeba zamienić na coś innego? Normalnie wyświetla się wypisany wcześniej komunikat o niemożności dodania wartości pustej.
Pozdrawiam
Go to the top of the page
+Quote Post
LeWaR
post
Post #8





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 22.04.2002
Skąd: Szubin

Ostrzeżenie: (0%)
-----


Cytat
[php:1:7124ae4438]
$query = "INSERT INTO wpis VALUES(null, '$autor', '$text', ";
[/php:1:7124ae4438]

Czy faktycznie masz przecinek na koncu zapytania sql??
Go to the top of the page
+Quote Post
DanielBB
post
Post #9





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Nie to jest fragment dłuższego zapytania łączonego za pomocą "." - to jest w porządku.
Widziałem w Chipie rozwiązanie w Postgre gdzie w linijce:
[php:1:0b706625aa]
$sql=insert into tabela values('konkretna_wartosc')";
[/php:1:0b706625aa]
nie jest wpisywana żadna wartość do klucza głównego aby rósł. W MySQL byłoby:
[php:1:0b706625aa]
$sql=insert into tabela values(null,'konkretna_wartosc')";
[/php:1:0b706625aa]
oczywiście przy założeniu że w Postgre mam pierwszą kolumnę id serial
a w MySQL id auto_increment...
Go to the top of the page
+Quote Post
LeWaR
post
Post #10





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 22.04.2002
Skąd: Szubin

Ostrzeżenie: (0%)
-----


Twoje:
[php:1:1d66793fad]<?php
$query = "INSERT INTO wpis VALUES(null, '$autor', '$text', ";
?>[/php:1:1d66793fad]

Ja bym zrobił taki wpis:

[php:1:1d66793fad]<?php
$query = "INSERT INTO wpis VALUES('', '$autor', '$text', ";
?>[/php:1:1d66793fad]
Zdaje się wtedy na baze, aby wstawiła wartość domyślną, a nie 'null'.
Go to the top of the page
+Quote Post
DanielBB
post
Post #11





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Dziwne ale przy rozwiązaniu '_' skrypt wysyła error o duplikacji klucza. Generalnie nie przechodzi do drugiego wiersza tylko próbuje chyba wpisywać ciągle do 1 rekordu.
Go to the top of the page
+Quote Post
DanielBB
post
Post #12





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 17.04.2003

Ostrzeżenie: (0%)
-----


Panowie dostałem na skrzynkę rozwiązanie od admina PostgreSQL.
zamiast null jest
nextval('wpis_id_seq')
Niezle 8O
Pozdrawiam
Go to the top of the page
+Quote Post
jezoo
post
Post #13





Grupa: Zarejestrowani
Postów: 92
Pomógł: 3
Dołączył: 4.04.2006

Ostrzeżenie: (0%)
-----


Cytat(DanielBB)
Panowie dostałem na skrzynkę rozwiązanie od admina PostgreSQL.
zamiast null jest
nextval('wpis_id_seq')
Niezle 8O

hehe
Cytat
'nextval()' function not found

taka odp serwera.

autonumerowanie odbywa sie za pomoca typu serial i w tym polu trzeba wpisac DEFAULT i smiga smile.gif np:
  1. INSERT INTO tabela1 VALUES(
  2. DEFAULT,
  3. 'Jan',
  4. 'Kowalski'
  5. );


bynajmniej w wersji 8.1 postgresql tak jest
pozdrawiam

Ten post edytował jezoo 29.11.2006, 13:51:15
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #14





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


jeśli się nie mylę to typ serial to 'pseudo' typ, bo to samo osiągniemy przez:
  1. CREATE SEQUENCE tablename_colname_seq;
  2. CREATE TABLE tablename (
  3. colname integer DEFAULT NEXTVAL('tablename_colname_seq') NOT NULL
  4. );

A przy tworzeniu SEQUENCE mamy o wiele większe możliwości... pomijając fakt kiedy to jest naprawdę użyteczne biggrin.gif


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 08:10