Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie
Toon posts:

[PostgreSQL] probleem met primary key van tabellen.

Pagina: 1
Acties:

Onderwerpen


  • bokkiewok
  • Registratie: juni 2001
  • Laatst online: 21-02 08:10
Hoi,

Ik moet een simpele database opzetten, een soort van cmdb voor een testomgeving.
De omgeving bestaat uit een aantal servers, die aan projecten gekoppeld worden.
De 'cmdb' dient ervoor om snel een overzicht te krijgen welk systeem waarvoor in gebruik is en voor hoelang.
Ik heb in postgres een database met drie tables aangemaakt, een voor de systemen, een voor de virtuele systemen en een voor de projecten. Alle drie heb ik zodanig aangemaakt dat de eerste kolom (de id-kolom) de primary key moet zijn. Ik was in de veronderstelling dat deze kolom automatisch word gevuld met integers die ook nog eens auto_increment zijn zodra ik rows ga toevoegen. Dit gebeurt echter niet. Ik ben nog een beginner op het gebied van databases, ik heb er op gegoogled, maar kan niet echt tot een antwoord komen. Dus ik hoop dat ik hier wel in de goeie richting kan worden geleid hiermee.

Dank!
bokkiewok

  • RedHat
  • Registratie: augustus 2000
  • Laatst online: 21:54
als je een kolom maakt, bijvoorbeeld `serverID` en je maakt die primary key en auto_encrement, werkt het dan niet ? Zijn er toevallig meer opties van toepassing op die kolom?

RedHat wijzigde deze reactie 07-10-2009 15:46 (20%)

Diablo3 BattleTag: RedHat#2846
Mijn Diablo 3 Monk Season 16


  • L-VIS
  • Registratie: april 2005
  • Laatst online: 22-02 20:57
Werkt ongeveer net als in Oracle, je moet een sequence aanmaken. Kostte me 1 sec googlen.....
http://pointbeing.net/web...nt-column-to-a-table.html

Gamertag


  • Grijze Vos
  • Registratie: december 2002
  • Laatst online: 22-02 14:43
quote:
bokkiewok schreef op woensdag 07 oktober 2009 @ 15:44:
... postgres ... kolom ... auto_increment ...
zoeken bij google naar 'postgres kolom auto increment'

Eerste hit.

Ik vraag me altijd af hoe mensen kunnen beweren dat ze gegoogled hebben als ik letterlijk drie termen uit hun post google in gooi en het antwoord als eerste hit terug krijg.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • leuk_he
  • Registratie: augustus 2000
  • Laatst online: 27-01 16:15

leuk_he

1. Controleer de kabel!

Als je de waarde vult met een auto-increment dan heb je altijd het probleem dat je in de client software (met een sequence) later de waarde weer moet opvragen als de die key (die weer Foreign key is in andere tabbellen) nodig hebt.

Daarom is het vaak handiger die waarde al in de client te generen.

maar de Methode van L-VIS http://v.netlogstatic.com/v4.00/2194//s/i/smilies/elvis.gif werkt wel.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • Grijze Vos
  • Registratie: december 2002
  • Laatst online: 22-02 14:43
quote:
leuk_he schreef op woensdag 07 oktober 2009 @ 15:58:
Daarom is het vaak handiger die waarde al in de client te generen.
En hoe handel je dan race conditions af? Auto increments zijn juist uitgevonden om dit soort problemen tegen te gaan.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • bokkiewok
  • Registratie: juni 2001
  • Laatst online: 21-02 08:10
Ja, als je weet waar je op moet zoeken. Ik heb de term auto increment niet gebruikt in de query. Daar zal dus waarschijnlijk de fout zitten. Beetje jammer om zo kort door de bocht te concluderen dat mensen volgens jou niet gegoogled hebben. Dat heb ik wel degelijk, wellicht dus met de verkeerde woorden. Zoals ik al zei, ik ben geen dbase/sql guru.

Evengoed bedankt voor de link.
quote:
Grijze Vos schreef op woensdag 07 oktober 2009 @ 15:57:
[...]


zoeken bij google naar 'postgres kolom auto increment'

Eerste hit.

Ik vraag me altijd af hoe mensen kunnen beweren dat ze gegoogled hebben als ik letterlijk drie termen uit hun post google in gooi en het antwoord als eerste hit terug krijg.

  • RobIII
  • Registratie: december 2001
  • Laatst online: 00:38

RobIII

Admin Devschuur®

^ Romeinse 3 ja!

quote:
leuk_he schreef op woensdag 07 oktober 2009 @ 15:58:
Als je de waarde vult met een auto-increment dan heb je altijd het probleem dat je in de client software (met een sequence) later de waarde weer moet opvragen als de die key (die weer Foreign key is in andere tabbellen) nodig hebt.

Daarom is het vaak handiger die waarde al in de client te generen.
Ja! Makkelijk als je meer dan 1 client hebt ook ;)


[edit]
/laaaaaaaaat

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • leuk_he
  • Registratie: augustus 2000
  • Laatst online: 27-01 16:15

leuk_he

1. Controleer de kabel!

quote:
Grijze Vos schreef op woensdag 07 oktober 2009 @ 16:04:
[...]

En hoe handel je dan race conditions af? Auto increments zijn juist uitgevonden om dit soort problemen tegen te gaan.
Via een sequence he die je met een aparte database toegang uitleest? Een sequnce geeft elk nummer maar 1 keer uit. Ja, er kunnen gaten in de nummers komen, maar dat hoort voor een ID Kolom niet uit te maken.

Hoe krijg jij anders de autonumber primary key terug uit je insert statement, waar je PK niet in staat, omdat hij toch automatisch wordt gegeneerd?

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • RobIII
  • Registratie: december 2001
  • Laatst online: 00:38

RobIII

Admin Devschuur®

^ Romeinse 3 ja!

Scope_Identity() :?
(MSSQL overigens, PostgreSQL weet ik niet)

[edit]
Ah, maar na even wat (kort) gelezen te hebben blijkt PostgreSQL daar inderdaad niet echt iets voor te hebben en kom je dus (schijnbaar) uit op dat Create Sequence gedoe

RobIII wijzigde deze reactie 07-10-2009 16:17 (126%)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


  • leuk_he
  • Registratie: augustus 2000
  • Laatst online: 27-01 16:15

leuk_he

1. Controleer de kabel!

quote:
RobIII schreef op woensdag 07 oktober 2009 @ 16:11:
Scope_Identity() :?
(MSSQL overigens, PostgreSQL weet ik niet)
Precies, een custom extensie. Niks mee aan de hand als je omgeving 100% MS is, maar onhandig als je connectors alleen standaard SQL ondersteunen.

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


  • bokkiewok
  • Registratie: juni 2001
  • Laatst online: 21-02 08:10
Uit het commentaar:

alter table <tablename> add <column> serial;

Doet wat ik wil !

Dank !
quote:
L-VIS schreef op woensdag 07 oktober 2009 @ 15:51:
Werkt ongeveer net als in Oracle, je moet een sequence aanmaken. Kostte me 1 sec googlen.....
http://pointbeing.net/web...nt-column-to-a-table.html

  • RobertMe
  • Registratie: maart 2009
  • Laatst online: 23:18
quote:
bokkiewok schreef op woensdag 07 oktober 2009 @ 16:23:
Uit het commentaar:

alter table <tablename> add <column> serial;

Doet wat ik wil !

Dank !


[...]
Uitleg, serial is een alias voor INT DEFAULT <volgende waarde uit nieuw aan te maken sequence> en maakt automatisch een nieuwe sequence aan. Het resultaat is dus hetzelfde als de losse CREATE SEQUENCE, alleen de weg erheen is iets korter :)

Voordeel van sequences (tegenover auto increment en identities) is, vind ik, dat je ze over meerdere tabellen kunt spreiden (meerdere tabellen met een id kolom die dezelfde sequence gebruiken voor de waarde) ook dat je eerst een id kan ophalen en daarna pas hoeft te inserten (als je bv. het id van een record wil verwerken in een bestandsnaam bij een file upload) is erg handig.

  • Alain
  • Registratie: oktober 2002
  • Niet online
quote:
RobertMe schreef op woensdag 07 oktober 2009 @ 16:29:
als je bv. het id van een record wil verwerken in een bestandsnaam bij een file upload
Als je een id in een bestandsnaam wilt verwerken, dan heeft het id blijkbaar een betekenis. Het opnemen van de id in een kolom leidt tot redundantie en inconsistentie. Je moet dus wel een verrekte goede reden hebben om dit zo op te lossen.

You don't have to be crazy to do this job, but it helps ....


  • Grijze Vos
  • Registratie: december 2002
  • Laatst online: 22-02 14:43
quote:
Ah, ik dacht dat je voorstelde uberhaupt geen sequence te gebruiken. De google hit die ik linkte gebruikte ook sequences.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


  • Remus
  • Registratie: juli 2000
  • Laatst online: 26-10-2013
quote:
RobIII schreef op woensdag 07 oktober 2009 @ 16:11:
Scope_Identity() :?
(MSSQL overigens, PostgreSQL weet ik niet)

[edit]
Ah, maar na even wat (kort) gelezen te hebben blijkt PostgreSQL daar inderdaad niet echt iets voor te hebben en kom je dus (schijnbaar) uit op dat Create Sequence gedoe
Om de waarde van de sequence terug te krijgen kan je gebruik maken van INSERT ... RETURNING ...; werkt ook voor andere berekende of default waarden
http://www.postgresql.org/docs/8.2/static/sql-insert.html
Pagina: 1


Apple iPhone 11 Microsoft Xbox Series X LG OLED C9 Google Pixel 4 CES 2020 Samsung Galaxy S20 4G Sony PlayStation 5 Nintendo Switch Lite

'14 '15 '16 '17 2018

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2020 Hosting door True