Ferienverwaltung: added new sequential primary key ferien_id, added primary constraint

This commit is contained in:
Alexei Karpenko
2026-02-19 17:08:43 +01:00
parent 7169cb68a2
commit a57df7862c
2 changed files with 123 additions and 1 deletions
+2 -1
View File
@@ -92,6 +92,7 @@ require_once('dbupdate_3.4/68744_StV_settings.php');
require_once('dbupdate_3.4/62889_reihungstest_ueberwachung_mit_constructor.php');
require_once('dbupdate_3.4/71399_dashboard_update_widget_paths.php');
require_once('dbupdate_3.4/71645_studvw_messagetab_ladezeit.php');
require_once('dbupdate_3.4/71405_ferienzeiten.php');
// *** Pruefung und hinzufuegen der neuen Attribute und Tabellen
echo '<H2>Pruefe Tabellen und Attribute!</H2>';
@@ -249,7 +250,7 @@ $tabellen=array(
"lehre.tbl_anrechnung_begruendung" => array("begruendung_id","bezeichnung"),
"lehre.tbl_anrechnungszeitraum" => array("anrechnungszeitraum_id","studiensemester_kurzbz","anrechnungstart","anrechnungende", "insertamum", "insertvon"),
"lehre.tbl_betreuerart" => array("betreuerart_kurzbz","beschreibung","aktiv"),
"lehre.tbl_ferien" => array("bezeichnung","studiengang_kz","vondatum","bisdatum"),
"lehre.tbl_ferien" => array("ferien_id","bezeichnung","studiengang_kz","vondatum","bisdatum"),
"lehre.tbl_lehreinheit" => array("lehreinheit_id","lehrveranstaltung_id","studiensemester_kurzbz","lehrfach_id","lehrform_kurzbz","stundenblockung","wochenrythmus","start_kw","raumtyp","raumtypalternativ","sprache","lehre","anmerkung","unr","lvnr","updateamum","updatevon","insertamum","insertvon","ext_id","lehrfach_id_old","gewicht"),
"lehre.tbl_lehreinheitgruppe" => array("lehreinheitgruppe_id","lehreinheit_id","studiengang_kz","semester","verband","gruppe","gruppe_kurzbz","updateamum","updatevon","insertamum","insertvon","ext_id"),
"lehre.tbl_lehreinheitmitarbeiter" => array("lehreinheit_id","mitarbeiter_uid","lehrfunktion_kurzbz","semesterstunden","planstunden","stundensatz","faktor","anmerkung","bismelden","updateamum","updatevon","insertamum","insertvon","ext_id","standort_id","vertrag_id"),
+121
View File
@@ -0,0 +1,121 @@
<?php
if (! defined('DB_NAME')) exit('No direct script access allowed');
//Add column ferien_id to lehre.tbl_ferien
if(!@$db->db_query("SELECT ferien_id FROM lehre.tbl_ferien LIMIT 1"))
{
$qry = 'ALTER TABLE lehre.tbl_ferien ADD COLUMN ferien_id integer;';
if(!$db->db_query($qry))
echo '<strong> lehre.tbl_ferien '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_ferien: Neue Spalte ferien_id hinzugefügt';
}
//Column ferien_id mit Werten befüllen
if($result = @$db->db_query("SELECT ferien_id FROM lehre.tbl_ferien where ferien_id is not null LIMIT 1"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = 'UPDATE lehre.tbl_ferien et SET ferien_id =
(SELECT rownumber FROM (SELECT ROW_NUMBER() OVER (ORDER BY bezeichnung, studiengang_kz)
AS rownumber, t.* FROM lehre.tbl_ferien t ORDER BY bezeichnung, studiengang_kz) rn
WHERE rn.bezeichnung = et.bezeichnung
AND rn.studiengang_kz = et.studiengang_kz);
';
if(!$db->db_query($qry))
echo '<strong> lehre.tbl_ferien '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_ferien: Spalte bis.tbl_ferien_id mit Werten aufgefüllt';
}
}
//Create Sequence lehre.tbl_ferien and grant Rights
if ($result = @$db->db_query("SELECT * FROM pg_class WHERE relname = 'tbl_ferien_ferien_id_seq'"))
{
if ($db->db_num_rows($result) == 0)
{
if ($count = @$db->db_query("SELECT * FROM lehre.tbl_ferien"))
{
$count = $db->db_num_rows($count) + 1;
$qry = 'CREATE SEQUENCE lehre.tbl_ferien_ferien_id_seq START ';
$qry .= $count;
if(!$db->db_query($qry))
{
echo '<strong> lehre.tbl_ferien '.$db->db_last_error().'</strong><br>';
}
else
{
echo '<br>lehre.tbl_ferien: Sequence lehre.tbl_ferien_ferien_id_seq mit Startwert ' . $count . ' erstellt';
$qry2 = "GRANT SELECT, UPDATE ON lehre.tbl_ferien_ferien_id_seq TO vilesci;
GRANT SELECT, UPDATE ON lehre.tbl_ferien_ferien_id_seq TO web;";
if(!$db->db_query($qry2))
{
echo '<strong>lehre.tbl_ferien_ferien_id_seq Berechtigungen: '.$db->db_last_error().'</strong><br>';
}
else
{
echo '<br>lehre.tbl_ferien: Rechte auf lehre.tbl_ferien_ferien_id_seq fuer web user und vilesci gesetzt ';
}
}
}
}
}
//lehre.tbl_ferien auf NOT NULL setzen
if ($result = @$db->db_query("SELECT is_nullable FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_ferien' AND column_name = 'ferien_id' and is_nullable = 'NO'"))
{
if($db->db_num_rows($result)==0)
{
$qry = 'ALTER TABLE lehre.tbl_ferien ALTER COLUMN ferien_id SET NOT NULL';
if(!$db->db_query($qry))
echo '<strong> lehre.tbl_ferien '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_ferien: Spalte bis.tbl_ferien_id auf NOT NULL gesetzt';
}
}
//lehre.tbl_ferien DEFAULT einstellen
if ($result = @$db->db_query("SELECT column_default FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'tbl_ferien' AND column_name = 'ferien_id' and column_default is null"))
{
if($db->db_num_rows($result)==1)
{
$qry = "ALTER TABLE lehre.tbl_ferien ALTER COLUMN ferien_id SET DEFAULT nextval('lehre.tbl_ferien_ferien_id_seq'::regclass);";
if(!$db->db_query($qry))
echo '<strong> lehre.tbl_ferien '.$db->db_last_error().'</strong><br>';
else
echo '<br> lehre.tbl_ferien: Defaultwert bei Spalte bis.tbl_ferien_id gesetzt';
}
}
//DELETE Constraint PRIMARY KEY pk_tbl_ferien (bezeichnung, studiengang_kz) entfernen
if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'pk_tbl_ferien'"))
{
if($db->db_num_rows($result)==1)
{
$qry = "ALTER TABLE lehre.tbl_ferien DROP CONSTRAINT pk_tbl_ferien;";
if (!$db->db_query($qry))
echo '<strong>lehre.tbl_ferien: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_ferien: Primary Key pk_tbl_ferien (bezeichnung, studiengang_kz) entfernt ';
}
}
// ADD PRIMARY KEY tbl_ferien_pk to lehre.tbl_ferien
if ($result = @$db->db_query("SELECT conname FROM pg_constraint WHERE conname = 'tbl_ferien_pk'"))
{
if ($db->db_num_rows($result) == 0)
{
$qry = "ALTER TABLE lehre.tbl_ferien ADD CONSTRAINT tbl_ferien_pk PRIMARY KEY(ferien_id);";
if (!$db->db_query($qry))
echo '<strong>slehre.tbl_ferien: '.$db->db_last_error().'</strong><br>';
else
echo '<br>lehre.tbl_ferien: Primary Key tbl_ferien_pk (ferien_id) hinzugefügt';
}
}