Grundsatzproblem

From: "Friedrich Stockebrand" <Friedrich(dot)Stockebrand(at)t-online(dot)de>
To: <pgsql-de-allgemein(at)postgresql(dot)org>
Subject: Grundsatzproblem
Date: 2005-12-09 03:41:43
Message-ID: 000601c5fc72$78fdafd0$0200a8c0@FRISTOBUERO
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-de-allgemein

Hallo,

z.Z. arbeite ich mich in PostgreSQL ein und versuche eine kleine Datenbank,
die bisher unter MySql lief, auf PostgreSQL umzuschreiben.

Installiert ist die aktuelle Windows-Version von PostgreSQL unter WinXP.

Im wesentlichen geht es um die 3 nachfolgenden Funktionen:

--------------------------------------

CREATE OR REPLACE FUNCTION create_table_buchungsdaten()
RETURNS void

AS $BODY$

DECLARE
v_count integer;

BEGIN

SELECT INTO v_count count(*) FROM pg_tables where tablename =
'buchungsdaten';

IF v_count = 0 THEN

CREATE TABLE buchungsdaten
(
LIKE Journal INCLUDING DEFAULTS
);

ALTER TABLE buchungsdaten
ADD id serial;

ALTER TABLE buchungsdaten
ADD stamp_created timestamp default now();

COMMENT ON TABLE buchungsdaten IS 'Buchungsdaten ohne Storno';

ELSE

TRUNCATE TABLE buchungsdaten;
SELECT setval (buchungsdaten_id_seq, 1, false);

END IF;

END;

$BODY$

LANGUAGE 'plpgsql' VOLATILE;

COMMENT ON FUNCTION create_Table_Journal() IS 'buchungsdaten';

--------------------------------------

CREATE OR REPLACE FUNCTION do_buchungsdaten()
RETURNS void

AS $BODY$

BEGIN

Execute create_table_buchungsdaten ();

INSERT INTO buchungsdaten
SELECT *
FROM journal
WHERE journal.belegnummer
NOT IN (
SELECT DISTINCT belegnummer
FROM journal
WHERE lower (buchungstext) like '<storno>%'
);

END;

$BODY$

LANGUAGE plpgsql;

COMMENT ON FUNCTION do_buchungsdaten() IS 'Erstellt Filter aus Journal die
Buchungssätze ohne Storno';

--------------------------------------

CREATE OR REPLACE FUNCTION run_first() RETURNS void AS $BODY$

BEGIN

PERFORM create_table_journal ();
EXECUTE create_table_buchungsdaten ();
PERFORM create_table_buchungsdaten_afa_anlagen ();
PERFORM create_table_buchungsdaten_jahresabschluss ();
PERFORM create_table_buchungstext_korrektur ();
PERFORM create_table_daten_afa_anlagen ();
PERFORM create_table_konten_abschreibung_sachanlagen ();
PERFORM create_table_konten_anlagen ();
PERFORM create_table_konten_betrag_ausgleichen ();
PERFORM create_table_konten_folgejahr ();
PERFORM create_table_konten_kosten_kfz_anteil_privat ();
PERFORM create_table_konten_kosten_raum_anteil_firma ();
PERFORM create_table_konten_kosten_telefon_anteil_privat ();
PERFORM create_table_konten_umbuchen ();
PERFORM create_table_konten_unternehmer_dienstreisen ();
PERFORM create_table_konten_unternehmer_fahrten_zur_arbeitsstaette ();
PERFORM create_table_konten_unternehmer_verpflegungsmehraufwand ();
PERFORM create_table_verteilung_fahrten_kfz ();
PERFORM create_table_verteilung_kosten_raum ();

/*
PERFORM import_konten_abschreibung_sachanlagen ();
PERFORM import_konten_anlagen ();
PERFORM import_konten_betrag_ausgleichen ();
PERFORM import_konten_folgejahr ();
PERFORM import_konten_kosten_kfz_anteil_privat ();
PERFORM import_konten_kosten_raum_anteil_firma ();
PERFORM import_konten_kosten_telefon_anteil_privat ();
PERFORM import_konten_umbuchen ();
PERFORM import_konten_unternehmer_dienstreisen ();
PERFORM import_konten_unternehmer_fahrten_zur_arbeitsstaette ();
PERFORM import_konten_unternehmer_verpflegungsmehraufwand ();
PERFORM import_verteilung_fahrten_kfz ();
PERFORM import_verteilung_kosten_raum ();
*/

-- ============================================

PERFORM import_journal ();
PERFORM import_kontoplan ();

-- EXECUTE do_buchungsdaten ();

-- PERFORM create_table_stammdaten ();
-- PERFORM create_table_konten_verwendung_von_gegenstaenden ();
-- PERFORM do_daten_afa_anlagen ();
-- PERFORM do_konten_umbuchen ();
-- PERFORM do_korrektur_privat_gebuchte_betriebsausgaben ();
-- PERFORM import_buchungsdaten_afa_anlagen ();

END;

$BODY$
LANGUAGE plpgsql;

--------------------------------------

Das Problem (es geht hier speziell um die Tablle "buchungsdaten")

Ist die Tabelle "buchungsdaten" nicht in der Datenbank vorhanden, wird sie
beim ersten Aufruf von "select run_first()" durch die darin enthaltene
Funktion "create_table_buchungsdaten ()" erzeugt. Wiederhole ich den Aufruf
von "select run_first()" erhalte ich die nachfolgende Fehlermeldung:

--------------------------------------

ERROR: column "buchungsdaten_id_seq" does not exist
KONTEXT: SQL statement "SELECT setval (buchungsdaten_id_seq, 1, false)"
PL/pgSQL function "create_table_buchungsdaten" line 27 at SQL statement
PL/pgSQL function "run_first" line 5 at execute statement

--------------------------------------

"buchungsdaten_id_seq" wird nachweislich beim ersten Durchlauf erzeugt.

Was ist die Ursache für diese Fehlermeldung?
Welchen Fehler habe ich in den erstellten Funktionen eingebaut, den ich
nicht sehe?


Für die Funktionsaufrufe habe ich zwischenzeitlich "EXECUTE" statt "PERFORM"
eingesetzt, aber das hilft auch nicht!


mfg

Friedrich Stockebrand




Responses

Browse pgsql-de-allgemein by date

  From Date Subject
Next Message A. Kretschmer 2005-12-09 10:37:27 Re: Grundsatzproblem
Previous Message Harald Fuchs 2005-12-08 13:49:56 Re: postgreSQL tunen