Wie mittels PL/SQL eine Datenbankverbindung blockieren?

Zrebna

Bekanntes Mitglied
Hi!

Folgender SQL-Code liefert mir ausgewählte Attribute aller Connections incl. dem Attribut 'blocking PIDs':

SQL:
select datname, pid, usename, application_name, client_addr, backend_start, state, wait_event, pg_blocking_pids(pid)
from pg_stat_activity;

Da kein Prozess bei mir eine Verbindung bzw. einen anderen Prozess blockiert, liefert mir die Abfrage für das Attribut ' pg_blocking_pids(pid)' keine Werte.
Ich möchte aber, dass hier zu Testzwecken Werte auftauchen.

Scheinbar soll man mittels einer PL/SQL-Methode einen blockierenden Prozess erzeugen können.

Weiß Jemand wie genau das geht?

Gruß
Zrebna
 

mihe7

Top Contributor
Erstmal eine Tabelle vorbereiten:
SQL:
CREATE TABLE blocker (
  id serial primary key,
  bvalue integer not null
);

INSERT INTO blocker(bvalue) VALUES (100);
INSERT INTO blocker(bvalue) VALUES (110);

SELECT * FROM blocker;

 id | bvalue 
----+--------
  1 |    100
  2 |    110
(2 rows)

In einer psql-Session (Session 1):
SQL:
\set AUTOCOMMIT=OFF;
UPDATE blocker SET bvalue = bvalue + 10 WHERE id = 1;

In einer zweiten psql-Session (Session 2):
SQL:
UPDATE blocker SET bvalue = bvalue + 10 WHERE id = 1;

Die zweite Session blockiert nun, bis die erste Session die Transaktion beendet hat. Das solltest Du nun mit Deinem SQL-Statement abfragen können.
 

Zrebna

Bekanntes Mitglied
Schon mal vielen Danks fürs Antworten - leider funktioniert es bei mir nicht.

Also nach dem Erstellen der beiden Tabellen und dem Deaktivieren von auto-committ in pgadmin4,
markiere ich einfach diese beiden Befehle und exekutiere sie:

SQL:
UPDATE blocker SET bvalue = bvalue + 10 WHERE id = 1;
UPDATE blocker SET bvalue = bvalue + 10 WHERE id = 1;

Danach hab ich einfach folgenden Befehl ausgeführt und gehofft, dass durch das Ausführen der beiden Update-Befehle ein neuer Prozess entstanden ist, der nun auch einen blockierenden Prozess hat, also von einem anderen Prozess blockiert wird:

SQL:
select datname, pid, usename, application_name, client_addr, backend_start, state, wait_event, pg_blocking_pids(pid)
from pg_stat_activity;

Leider ist das nicht der Fall gewesen :(

Der neue Wert von bvalue mit der id = 1 ist nun auch 120.

Liegt es daran, dass ich die beiden Update-Befehle einfach konsekutiv in einem Ruck ausgeführt habe?
Wie führt man die beiden Befehle in unterschiedlichen Sessions aus, so wie du es angeführt hast?
 

KonradN

Super-Moderator
Mitarbeiter
Du musst mehrere Verbindungen öffnen ...
1. Verbindung: Du machst das UPDATE ohne COMMIT, damit hat diese Verbindung einen Lock auf der Table Row
2. Verbindung: Du greifst ebenfalls auf diese Row zu, die durch die andere Verbung gelockt ist. Dieser Zugriff muss somit warten, bis ide erste Verbindung den Lock freigibt.
3. Verbindung: Du fragst nach den Blocks- und nun solltest Du sehen, dass die 2. Verbindung geblockt wurde.
 

Zrebna

Bekanntes Mitglied
Du musst mehrere Verbindungen öffnen ...
1. Verbindung: Du machst das UPDATE ohne COMMIT, damit hat diese Verbindung einen Lock auf der Table Row
2. Verbindung: Du greifst ebenfalls auf diese Row zu, die durch die andere Verbung gelockt ist. Dieser Zugriff muss somit warten, bis ide erste Verbindung den Lock freigibt.
3. Verbindung: Du fragst nach den Blocks- und nun solltest Du sehen, dass die 2. Verbindung geblockt wurde.

Ich kenne es bei pgadmin4 bis dato nur so bzgl. neue Verbindungen erstellen:

Ich wechsel zu einer anderen Datenbank:
Wenn ich nun den Schritt 2 ausführe, dann ist die Tabelle 'blocker' natürlich in dieser db nicht bekannt.

Soll sie dort auch erstellt werden? Wobei, dann ist es ja nicht die selbe Relation.

Oder wie erstellt man in pgadmin4 neue Verbindungen und kann dann (im selben?) Query-Fenster die obigen 3 Schritte bzgl. 3 unterschiedlichen Verbindungen ausführen?

edit:
Und in welcher der drei Verbindungen wir dieser Code ausgeführt?

SQL:
CREATE TABLE blocker (
  id serial primary key,
  bvalue integer not null
);

INSERT INTO blocker(bvalue) VALUES (100);
INSERT INTO blocker(bvalue) VALUES (110);

SELECT * FROM blocker;
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Sowas könntest Du per Kommandozeile machen - einfach in 3 Terminal Fenstern jeweils auf die Datenbank zugreifen.

Und pgadmin kenne ich nicht so im Detail. Aber das Tool lässt sich ggf. auch einfach mehrfach starten? Oder ein Server mehrfach eintragen, so dass man mehrere Connections bekommen kann? Aber über die Kommandozeile ist sowas immer am einfachsten finde ich.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Zrebna Wie mittels Hibernate eine Join-Tabelle als eigene Java-Klasse erstellen? Datenbankprogrammierung 5
A Problem mit Eintragen von Daten in eine Datenbank mittels DAO Datenbankprogrammierung 4
R MySQL Voraussetzungen für eine erfolgreiche Datenbankanbindung mittels JDBC Datenbankprogrammierung 2
Zrebna Lediglich interne DB-Verbindungen (Connections) auslesen - mittels Java Datenbankprogrammierung 4
H MariaDB-Zugriff mittels Java SE Datenbankprogrammierung 3
G Laufzeit Bestimmung mittels Landau Symbolic Datenbankprogrammierung 13
G Laufzeit eines Algorithmus mittels Big Theta bestimmen Datenbankprogrammierung 5
P Mittels Java einen neuen MySQL User erstellen Datenbankprogrammierung 4
C Hibernate n:m mittels Zwischentabelle und bidirektionaler Zugriff Datenbankprogrammierung 2
T Mittels SQL-String ein Berechnung vornehmen Datenbankprogrammierung 2
D Mittels JUnit Reihe von DAOs testen Datenbankprogrammierung 10
J MYSQL-Zugriff mittels einer Java-Bean Datenbankprogrammierung 42
K Zugriff mittels JDBC funktioniert nur lokal Datenbankprogrammierung 5
M Mysql datenbank auslesen und mittels servlet wiedergeben Datenbankprogrammierung 3
W Problem bei Connection mit SQLServer-Datenbanke mittels Java Datenbankprogrammierung 2
K Stored Procedures, mittels Java Datenbankprogrammierung 8
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
I SaaS Applikation: pro Kunde eine Datenbank / Schema oder eine DB für alle Kunden? Datenbankprogrammierung 76
Zrebna PostgreSQL-Query in eine MicrosoftSQL-Query konvertieren - chatGPT hilft nur bedingt. Datenbankprogrammierung 3
T Spring MongoDB: Prüfen ob bereits eine Email existiert Datenbankprogrammierung 15
Zrebna Probleme bei Überführung von SQL-Code in eine HQL-Abfrage Datenbankprogrammierung 3
berserkerdq2 Was genau muss ich bei date eingeben, wenn ich in Java eine Spalte definiere, die date ist? Datenbankprogrammierung 1
pkm PostgreSQL Kann mit mybatis einen Parameter für eine postgreSQL-Abfrage nicht übergeben. Datenbankprogrammierung 5
Kirby.exe Eine Tabelle updaten Datenbankprogrammierung 16
B Wie kopieren ich eine Spalte von einer Tabelle in eine andere Tabelle SQLite durch java code? Datenbankprogrammierung 26
Z Aus zwei bestehenden Table eine zusätzliche Gemeinsame machen (JavaFX) Datenbankprogrammierung 21
Avalon Attribute werden mit Unterstrich in eine MySQL Datenbank eingetragen Datenbankprogrammierung 10
pkm PostgreSQL Auf eine Spalte kann aus einem Teil der SQL-Aussage nicht zugegriffen werden Datenbankprogrammierung 3
F Mapping einer SQL Abfrage in eine Klasse Datenbankprogrammierung 4
H suche eine Login system Bibliothek für Java Datenbankprogrammierung 5
C Datenbank anlegen und über eine Website mit Daten füllen? Datenbankprogrammierung 25
G Eine Spalte in xampp als Typ array erstellen - ein array mit "insert" hinzufügen. Datenbankprogrammierung 3
F Create Table - Habe ich eine schwache Entität erzeugt ? Datenbankprogrammierung 4
Dimax MySQL Trigger für eine Spalte Datenbankprogrammierung 5
Dimax MySQL Maximale Datenlänge für eine Spalte einer Datenbank in java ermitteln Datenbankprogrammierung 15
D MySQL Eibinden des "mysql-connector" in eine fertige Jar Datenbankprogrammierung 3
P JSP - Daten aus 2 Tabellen in eine neue Tabelle einfügen Datenbankprogrammierung 1
P Daten in eine mySQL Datenbank einfügen Datenbankprogrammierung 4
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
Thallius MySQL Tabelle splitten aber wie eine abfragen? Datenbankprogrammierung 10
B MySQL Eine Art Sverweis Datenbankprogrammierung 27
O HSQLDB Eine Entität, mehrere Tabellen Datenbankprogrammierung 8
B SQL-Statement Prüfen ob eine Spalte einen Wert enthält Datenbankprogrammierung 2
X SQLite Erhalte bei Query INSERT INTO eine NullPointerException Datenbankprogrammierung 10
L0MiN Wie kann ich eine bestimmte Seite aus verschiedenen Excel-Tabellen in eine neue Exceldatei kopieren? Datenbankprogrammierung 1
N Wie in Java Zugriffe und Updates auf eine Datenbank regeln ? Datenbankprogrammierung 1
E Wie kann ich aus diesem XML eine XMLTABLE-Funktion bauen? Datenbankprogrammierung 3
E Wie kann man mit einer ID-Spalte über eine Parameterübergabe auf eine Seite verweisen? Datenbankprogrammierung 17
A Eine MySQL Zeile mit JDBC löschen Datenbankprogrammierung 5
M Warum ist es suboptimal viele Indexe auf eine Datenbanktabelle zu setzen? Datenbankprogrammierung 4
L Datenmodell erstellen für eine Nutzertanalyse Datenbankprogrammierung 1
serjoscha MySQL Eine Instanz von eigenem DBWrapper -> Fehler durch mehrfachbenutzung möglich? Datenbankprogrammierung 2
S HSQLDB Verbieten eines update auf eine bestimmte reihe Datenbankprogrammierung 4
V HSQLDB Insert in eine Tabelle mit Autoincrement Datenbankprogrammierung 2
H Grosse Menge an Daten in eine Datenbank Datenbankprogrammierung 32
P MySQL eine richtige Datenbank für einen routenplaner erstellen Datenbankprogrammierung 2
D SQL Update auf eine Query möglich? Datenbankprogrammierung 4
S SqlObject - eine objektorientierte Art SQL-Statements zu schreiben. Datenbankprogrammierung 4
C Mit jsp über Java eine DB Abfrage durchführen --> java.lang.ClassNotFoundException Datenbankprogrammierung 4
K SQLite CSV-Datei einlesen in eine Datenbank Datenbankprogrammierung 7
E Datenbank Abfragen in eine GUI schreiben Datenbankprogrammierung 8
L MySQL MySql in eine Application einbinden? Datenbankprogrammierung 18
H Derby/JavaDB Eine verschlüsselte Derby-Datenbank wieder entschlüsseln Datenbankprogrammierung 4
D Was passiert bei absolut zeitgleichem Zugriff auf eine Tablerow Datenbankprogrammierung 7
I Belastet es das System zu sehr einen Timer jede 0.2 Sekunden eine DB Abfrage machen zu lassen? Datenbankprogrammierung 9
I Zugriff auf eine Datenbank auf dem Webserver Datenbankprogrammierung 2
F H2:Wie kann man insert eine Reihe "int" wert als blob in table? Datenbankprogrammierung 12
J mal wieder eine Frage zu parallelen Transaktionen.. Datenbankprogrammierung 2
Screen Ich suche eine SQLDatenbank ohne JDBC-Treiber Datenbankprogrammierung 12
H Derby/JavaDB SQLException wenn die Datenbank in eine Jar gepackt wurde. Datenbankprogrammierung 6
turmaline [Hibernate] @OneToMany - Eine referenzierte Tabelle abfragen Datenbankprogrammierung 11
S Werte aus Datenbank auslesen und in eine bestimmte Excelzelle eintragen Datenbankprogrammierung 2
T Wer kann mir eine Datenbank empfehlen Datenbankprogrammierung 13
DStrohma MS SQL Server 2005 + Java: Immer nur eine aktive Verbindung erlaubt? Datenbankprogrammierung 5
D MySQL Wie schreibe ich in eine Datenbank? Datenbankprogrammierung 8
J String[] in eine SQL-Anweisung implementieren Datenbankprogrammierung 13
Q Access Datenbank in eine Internetseite einbinden Datenbankprogrammierung 2
J Über einen Button eine SQL-DB aussuchen Datenbankprogrammierung 3
O eine Tabelle hat mehrere PrimKey mit dem selben Wert Datenbankprogrammierung 9
R Connection Problem für eine externe DB mit Java (JDBC) Datenbankprogrammierung 9
M Zugriff auf eine Access-Datenbank innerhalb eines jar-Files Datenbankprogrammierung 7
N Wie kann ich Zugriff auf eine MS Access DB (mit JDBC) über Netzwerk erreichen? Datenbankprogrammierung 7
G Wie sieht eine Datenbankverbindung mit jndi aus? Datenbankprogrammierung 3
T eine Datenbank updaten Datenbankprogrammierung 6
C Prüfen, ob eine MySQL-Tabelle bereits existiert Datenbankprogrammierung 7
E Wie auf eine MySql Datenbank zugreifen Datenbankprogrammierung 25
D Werte mit java programm in eine Datenbank einlesen Datenbankprogrammierung 7
T JPQL Query für eine Tabellenansicht Datenbankprogrammierung 2
B Wie persistiert man eine Tree-ähnliche Datenbankstruktur? Datenbankprogrammierung 2
M Aus einem Applet eine Datenbankverbindung starten? Datenbankprogrammierung 26
R Datenbankstruktur für eine renn simulation Datenbankprogrammierung 3
H Wie kann ich eine Datenbank Connection aus XML-Datei lesen! Datenbankprogrammierung 2
G Wie baut man eine Anwendung mit DB Zugriff Datenbankprogrammierung 3
S Als Rückgebewert eine Liste von Werten? Datenbankprogrammierung 3
A Auslesen von Werten aus der DB in eine csv-Datei Datenbankprogrammierung 4
O Oracle 11g wirft bei 90 % der installation eine Exception ? Datenbankprogrammierung 5
T Recordsets in eine JTable einlesen mit Netbeans 6.0 Datenbankprogrammierung 2
R Warum kommt eine Exception bei instanceof ? Datenbankprogrammierung 4
M Tabelle von einer Datenbank in eine Andere Datenbankprogrammierung 4
G Inhalt eine Clob Feldes zw. zwei DB's kopieren Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben