Projekt

Allgemein

Profil

Aktionen

Update auf V25

CREATE OR REPLACE FUNCTION TSystem.currentuser()
RETURNS varchar AS $$
   SELECT current_user::varchar
$$ LANGUAGE sql STABLE;

CREATE OR REPLACE FUNCTION TSystem.current_user()
RETURNS varchar AS $$
   SELECT current_user::varchar
$$ LANGUAGE sql STABLE;

DROP FUNCTION IF EXISTS prodat_languages.lang_text(integer, integer);

CREATE OR REPLACE FUNCTION prodat_languages.lang_text(integer, varchar) RETURNS varchar
  AS $$
     --WITH bringt nix, langsamer
     SELECT coalesce(
       (
          SELECT
            coalesce(CASE _curr_lang
                          WHEN 'D'  THEN coalesce(t_kundtxt0, t_feld0, t_kundtxt0, t_feld0)
                          WHEN 'F'  THEN coalesce(t_kundtxt1, t_feld1, t_kundtxt0, t_feld0)
                          WHEN 'EN' THEN coalesce(t_kundtxt3, t_feld3, t_kundtxt0, t_feld0)
                          WHEN 'IT' THEN coalesce(t_kundtxt4, t_feld4, t_kundtxt0, t_feld0)
                          WHEN 'ES' THEN coalesce(t_kundtxt5, t_feld5, t_kundtxt0, t_feld0)
                          WHEN 'CZ' THEN coalesce(t_kundtxt6, t_feld6, t_kundtxt0, t_feld0)
                          WHEN 'RU' THEN coalesce(t_kundtxt7, t_feld7, t_kundtxt0, t_feld0)
                     ELSE
                          coalesce(t_kundtxt0, t_feld0)
                     END
                     ,
                     $2
            )
          FROM public.text0
          LEFT JOIN LATERAL (SELECT s_inha FROM public.settings WHERE s_vari = 'LangMenu:' || TSystem.current_user() ) AS user_lang ON true
          LEFT JOIN LATERAL (SELECT s_inha FROM public.settings WHERE s_vari = 'Lang') AS main_lang ON true

          LEFT JOIN LATERAL (SELECT coalesce((SELECT s_spr_key FROM public.adkspco WHERE s_spco = user_lang.s_inha),
                                              main_lang.s_inha
                                             ) AS _curr_lang
                            ) AS lang ON true
          WHERE t_nr = $1
       )
     , $2
     )
  $$ LANGUAGE sql STABLE PARALLEL SAFE;

SELECT TSystem.Settings__Set('ProdatVersion', '25.24.00.00'); -- für DBUpdates Sync

ALTER TABLE dbupdates ALTER COLUMN upd_bez TYPE  varchar(150);
ALTER TABLE dbupdates ADD   COLUMN IF NOT EXISTS upd_donedat   timestamp(0);
ALTER TABLE dbupdates ADD   COLUMN IF NOT EXISTS upd_sperr     boolean NOT NULL DEFAULT false;

ALTER TABLE dbupdates ADD   COLUMN IF NOT EXISTS upd_released  boolean NOT NULL DEFAULT true;
ALTER TABLE dbupdates ALTER COLUMN               upd_released                  SET DEFAULT false;

CREATE TYPE tsystem.dblink__connection
  AS ENUM (
    'default',
    'syncro'
  );

CREATE OR REPLACE FUNCTION tsystem.dblink__connectionstring__get(_t tsystem.dblink__connection DEFAULT 'default')
  RETURNS varchar AS $$
  DECLARE result varchar;
  BEGIN
    CASE _t
        WHEN 'default' THEN
            result := 'host=localhost port=' || inet_server_port()::integer || ' dbname=' || current_database() || ' user=SYS.dblink password=SYS.dblink';
        WHEN 'syncro' THEN
            result := 'host=pg.prodat-erp.de port=5432 dbname=PRODAT-18.08 user=syncro password=syncro';
        ELSE
            RAISE EXCEPTION 'Unknown connection type: %', _t;
    END CASE;
    RETURN result;
  END $$ LANGUAGE plpgsql IMMUTABLE;

DROP FUNCTION IF EXISTS tsystem.settings__gettext(character varying);

CREATE OR REPLACE FUNCTION tsystem.syncro__dbupdates(IN _dblink VARCHAR DEFAULT tsystem.dblink__connectionstring__get( 'syncro' ) ) RETURNS void AS $$
  BEGIN
    SET LOCAL SESSION AUTHORIZATION syncro;

    -- NotThisFields: dbrid,upd_donedat
    INSERT INTO dbupdates ( upd_id,
                            upd_parent,
                            upd_minver,
                            upd_kunde,
                            --upd_donedat,
                            upd_bez,
                            upd_txt,
                            upd_sql,
                            upd_projekt,
                            upd_noerr,
                            upd_sperr,
                            upd_released,
                            --
                            insert_date,
                            insert_by,
                            modified_by,
                            modified_date
                          )

    SELECT *
      FROM dblink(_dblink,
                   'SELECT upd_id,
                           upd_parent,
                           upd_minver,
                           upd_kunde,
                           --upd_donedat,
                           upd_bez,
                           upd_txt,
                           upd_sql,
                           upd_projekt,
                           upd_noerr,
                           upd_sperr,
                           upd_released,
                           --
                           insert_date,
                           insert_by,
                           modified_by,
                           modified_date
                      FROM dbupdates
                     WHERE
                            ( upd_kunde IS NULL OR upd_kunde LIKE ' || TSystem.quote_literal__connstr_param( TSystem.Settings__Get( 'KUNDE' ) ) || ' )
                          AND upd_minver <= ' || TSystem.quote_literal__connstr_param( TSystem.Settings__Get( 'ProdatVersion' ) ) || '
                          AND NOT upd_sperr
                          AND     upd_released ')
        AS ( _upd_id       varchar(30),
             upd_parent    varchar(30),              -- parent (Baumstruktur)
             upd_minver    varchar(11),              -- [SYNCRO:Version] Mindest-Programmversion
             upd_kunde     varchar(20),              -- [SYNCRO:Kunde]
             --upd_donedat timestamp(0),             -- [SYNCRO:NotThisFields] update eingespielt am
             upd_bez       varchar(150),
             upd_txt       text,
             upd_sql       text,
             upd_projekt   varchar(100),
             upd_noerr     boolean,
             upd_sperr     boolean,
             upd_released  boolean,
             -- System (tables__generate_missing_fields)
             insert_date   date,
             insert_by     varchar(32),
             modified_by   varchar(32),
             modified_date timestamp(0)               -- [SYNCRO:Modified]
           )
     WHERE NOT EXISTS( SELECT true FROM dbupdates WHERE upd_id = _upd_id );
    ---

    RAISE NOTICE 'dbupdates %', (SELECT count(*) FROM dbupdates);
  END $$ LANGUAGE plpgsql;

SELECT tsystem.syncro__dbupdates();

Update Postgres 13/15 (ab Prodat 2104)

  • Postgres 13/15 Installieren
  • pg_hba.conf übernehmen
  • ALTE SICHERUNGEN ENTFERNEN, sonst wird alles mitgenommen und man muss überall die implicit-casts einspielen!
  • ggf eigene cluster für mandanten wenn diese getrennt sein sollen. > https://redmine.prodat-sql.de/issues/17033#note-15
  • MoveDB Script ausführen. Dazu das Script direkt anpassen (Server und Port). Anweisungen beachten und unbedingt einhalten!
    + ..\Administration\DB_Admin_BackUp_TestDB\DB_Move_DB_Cluster__too.bat

Update Version 12 (Postgres 9) auf Version 2206 (Postgres 13/15)

  • Postgres 13/15 installieren
  • gem. oberer Beschreibung den Datenbankcluster in Postgres 13/15 umziehen. Somit wird am Bestandssystem NICHTS geändert.
  • Nachdem der Cluster umgezogen ist, müssen die Files im Anhang ausgeführt werden
    + Durch diese Files werden Dummy Funktionen eingespielt, die Kompatiblilität mit dem neuen Client herstellen. Teilweise werden nuf Funktionsrümpfe eingespielt, damit die Oberflächen starten. Durch die DBupdates werden dann die richtigen Funktionen eingespielt
    + Wenn es beim Einspielen der Files zu fehlern kommt, muss man checken ob die Funktionen doch bereits vorhanden sind und dann auskommentieren

Update V11

SQL

Von [S] Jens A vor 4 Tagen aktualisiert · 19 Revisionen