Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird DB Datensatz über RDB$DB_KEY finden (https://www.delphipraxis.net/210051-firebird-db-datensatz-ueber-rdb%24db_key-finden.html)

Kostas 22. Feb 2022 16:31

Datenbank: Firebird • Version: 3.0 • Zugriff über: FIREDAC

Firebird DB Datensatz über RDB$DB_KEY finden
 
Hallo Zusammen,

IBExpert zeigt RDB$DB_KEY den Wert '129:27' an.
Wie müsste ich den value convertieren so dass ich danach über Where suchen kann?

das habe ich versucht
Code:
where DB_KEY = cast('129:27' as char(8));
where RDB$DB_KEY = '129:27'

IBExpert 22. Feb 2022 19:00

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
ist aus meiner sicht keine gute idee, weil du ggf nach einem backup/restore die datensätze unter anderen werten wieder finden würdest

cast(RDB$DB_KEY as CHAR(8) CHARACTER SET OCTETS)

zeigt dir den wert aber in anderer art an, aber zum speichern oder suchen bringt dich das nicht weiter

Kostas 22. Feb 2022 19:08

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
Oh, danke für den Hinweis. Das wusste ich nicht, somit hat sich das erledigt.

knuut21 22. Feb 2022 19:53

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
Falls Du in diese Richtung dennoch weiter denken möchtest, hier ein schönes Anwendungsbeispiel: https://www.ibphoenix.com/resources/...how_to/doc_385

stalkingwolf 23. Feb 2022 12:11

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
die DB_KEY kommen nur dann rein, wenn ihr keinen Primary Index definiert habt.
IMO sind die Tabellen auch nur für kleine Datenmengen zu gebrauchen. Weil die Performance beim Insert ist alles andere als gut.

Lemmy 24. Feb 2022 05:25

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
Zitat:

Zitat von stalkingwolf (Beitrag 1502617)
die DB_KEY kommen nur dann rein, wenn ihr keinen Primary Index definiert habt.

nein, den kannst du auch bei Tabellen abfragen die einen PK haben.

Zitat:

Zitat von stalkingwolf (Beitrag 1502617)
IMO sind die Tabellen auch nur für kleine Datenmengen zu gebrauchen. Weil die Performance beim Insert ist alles andere als gut.

Was willst Du damit sagen? Welche Tabellen? die von Firebird?

IBExpert 24. Feb 2022 11:04

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
vielleicht zum verständnis:

jede tabelle hat für jeden datensatz einen wert für rdb$db_key, der ist immer binär eindeutig
pro Datensatz und ist zB für die Indizes erforderlich. In einem Index befindet sich zB ein
Wert und dazu dann die liste der rdb$db_key werte, die zu diesem Wert in den Records zu
finden sind

das was ibexpert und andere tools da als Darstellung benutzen entspricht dem Inhalt,
vor dem Doppelpunkt ist eine konstante pro Tabelle (ist im Prinzip die RDB$RELATION_ID
in RDB$RELATIONS). Wenn da zb 129 steht ist die Tabelle dort mit der ID 129 gespeichert.

wenn Ihr eine tabelle habt mit zB char(1) a..z also 26 records, die nacheinander
in der reihenfolge per insert eingefügt werden, dann sieht das so aus als ob dahinter
dann 129:1, 129:2, ... 129:26 steht, was binär auch stimmt.

wenn ihr nun b..y löscht bleiben als sichtbare rdb$db_keys nur
129:1=a und 129:26=z übrig

und nach einem backup/restore werden die nun nur noch 2 records mit neuen rdb$db_keys
eingespielt
129:1=a und 129:2=z

nach dem restore werden auch die indizes neu erstell, haben also dann auch die richtigen
Werte

Für eine technische Anwendung ist außerhalb der internen Verwaltung, die Firebird damit macht,
die Nutzung vom rdb$db_key eine ziemlich unbrauchbare idee

Im Prinzip ist das sozusagen nichts anderes als die interne hausnummer jedes Records
die nur bis zum restore statisch ist

IBExpert 24. Feb 2022 11:08

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
Zitat:

Zitat von stalkingwolf (Beitrag 1502617)
die DB_KEY kommen nur dann rein, wenn ihr keinen Primary Index definiert habt.
IMO sind die Tabellen auch nur für kleine Datenmengen zu gebrauchen. Weil die Performance beim Insert ist alles andere als gut.

da fehlt mir auch jeder technische zusammenhang in dieser Aussage
warum "sind die Tabellen auch nur mit kleinen Datenmengen zu gebrauchen"?

Was mache ich falsch, das bei mir Inserts auf Tabellen mit mehr als einer
Milliarde Datensätze schnell laufen? ist das noch eine kleine Datenmenge?

stalkingwolf 24. Feb 2022 11:19

AW: Firebird DB Datensatz über RDB$DB_KEY finden
 
Vergesst es. Bei uns wird der RDB$DB_KEY in 2 Tabellen per Default in FlameRobin angezeigt, weil diese beiden Tabellen keinen PK besitzen. Daher auch der Bezug auf die Performance.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz