Traitement Des Exceptions PostgreSQL
Je suis nouveau à PostgreSQL. Quelqu'un pourrait-il corriger cette question?
BEGIN TRANSACTION;
BEGIN;
CREATE TABLE "Logs"."Events"
(
EventId BIGSERIAL NOT NULL PRIMARY KEY,
PrimaryKeyId bigint NOT NULL,
EventDateTime date NOT NULL DEFAULT(now()),
Action varchar(12) NOT NULL,
UserId integer NOT NULL REFERENCES "Office"."Users"(UserId),
PrincipalUserId varchar(50) NOT NULL DEFAULT(user)
);
CREATE TABLE "Logs"."EventDetails"
(
EventDetailId BIGSERIAL NOT NULL PRIMARY KEY,
EventId bigint NOT NULL REFERENCES "Logs"."Events"(EventId),
Resource varchar(64) NOT NULL,
OldVal varchar(4000) NOT NULL,
NewVal varchar(4000) NOT NULL
);
COMMIT TRANSACTION;
RAISE NOTICE 'Task completed sucessfully.'
EXCEPTION;
ROLLBACK TRANSACTION;
RAISE ERROR @ErrorMessage, @LineNumber, @ErrorState --how to catch errors and display them????
END;
Questions:
- comment imprimer un message comme "imprimer" en T-SQL?
- comment soulever des erreurs avec des informations d'exception?
26
demandé sur
Jonathan Leffler
2011-02-02 20:24:22
3 réponses
Pour attraper le message d'erreur et son code:
do $$
begin
create table yyy(a int);
create table yyy(a int); -- this will cause an error
exception when others then
raise notice 'The transaction is in an uncommittable state. '
'Transaction was rolled back';
raise notice '% %', SQLERRM, SQLSTATE;
end;
$$ language 'plpgsql';
n'ai pas trouvé le numéro de la ligne encore
50
répondu
Michael Buen
2011-08-11 00:13:08
déclaration, une nouvelle option dans la version 9.0:
DO LANGUAGE plpgsql
$$
BEGIN
CREATE TABLE "Logs"."Events"
(
EventId BIGSERIAL NOT NULL PRIMARY KEY,
PrimaryKeyId bigint NOT NULL,
EventDateTime date NOT NULL DEFAULT(now()),
Action varchar(12) NOT NULL,
UserId integer NOT NULL REFERENCES "Office"."Users"(UserId),
PrincipalUserId varchar(50) NOT NULL DEFAULT(user)
);
CREATE TABLE "Logs"."EventDetails"
(
EventDetailId BIGSERIAL NOT NULL PRIMARY KEY,
EventId bigint NOT NULL REFERENCES "Logs"."Events"(EventId),
Resource varchar(64) NOT NULL,
OldVal varchar(4000) NOT NULL,
NewVal varchar(4000) NOT NULL
);
RAISE NOTICE 'Task completed sucessfully.';
END;
$$;
12
répondu
Frank Heikens
2011-02-03 08:52:19
vous pouvez écrire ceci comme un script psql, par exemple,
START TRANSACTION;
CREATE TABLE ...
CREATE TABLE ...
COMMIT;
\echo 'Task completed sucessfully.'
et courir avec
psql -f somefile.sql
il n'est pas possible de soulever des erreurs avec des paramètres dans PostgreSQL directement. Lors du portage d'un tel code, certaines personnes encoder les informations nécessaires dans la chaîne d'erreur et d'analyser si nécessaire.
tout Cela fonctionne un peu différemment, alors soyez prêt à réapprendre/repenser/réécriture beaucoup de choses.
3
répondu
Peter Eisentraut
2011-02-02 19:52:50