[gull] pgsql...aaaarh
Cedric BRINER
briner at infomaniak.ch
Thu Jun 16 19:46:02 CEST 2005
> > DROP TABLE test;
> > DROP TABLE new_test;
>
> suivant la version de PostgreSQL il faut aussi supprimer les séquences
> (pas dans les versions récentes à ma connaissance).
je ne savais pas. En tout cas, ca se fait de maniere automatique avec la version 8 ! Mais c'est toujours bon a savoir.
> > CREATE TABLE test (id serial NOT NULL UNIQUE, nom varchar(32));
>
> > SELECT * from test_id_seq ;
> > SELECT * from new_test_id_seq ;
> > --- est-ce normal d'avoir une difference pour la colonne ``log_cnt''
>
> désolé, je ne vois pas ce que c'est. Extrait ?
pfff ;)) j'avais tout ecrit en PGSQL avec des commmentaire en ``---'' pour faire du copier coller...
alors l'extrait c'est :
test=# SELECT * from test_id_seq ;
sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called
---------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
test_id_seq | 3 | 1 | 9223372036854775807 | 1 | 1 | 31 | f | t
(1 row)
test=# SELECT * from new_test_id_seq ;
sequence_name | last_value | increment_by | max_value | min_value | cache_value | log_cnt | is_cycled | is_called
-----------------+------------+--------------+---------------------+-----------+-------------+---------+-----------+-----------
new_test_id_seq | 3 | 1 | 9223372036854775807 | 1 | 1 | 0 | f | t
(1 row)
log_cnt peut que c'est le log(count)??
---snip---
> > --- En fait, je me demandais si il n'y aurait-il moyen pas moyen depuis pypgsql (python postgresql)
> > --- de recuperer une sorte de description de la DB et de savoir des lors que >test_id_key< est une
> > --- contrainte d'unicite sur le couple ( table:>test<, colonne:>id< )???
>
> oui, la base s'auto-décrit:
>
> Schéma des métadata, comment trouver les informations dans les métadata
> Méthode standard SQL: Information Schema
> /usr/share/doc/postgresql-doc/html/information-schema.html
excellent !
je vais y jeter un oeil
---snip---
> > DROP SEQUENCE new_test_id_seq ;
> > --- ERROR: cannot drop sequence new_test_id_seq because table test column id requires it
> > --- HINT: You may drop table test column id instead.
> > --- et la j'ai une erreur de pgsql... table >test< column >id< requires it ??
>
> Alors, ça, on dirait un bug. Faire un exemple et envoyer à la liste de
> développement.
ok envoye !
> > 5) si m'a base est en prod, je devrais faire ce genre de truc entre un begin commit ?
>
> PostgreSQL -- du moins quand j'avais vérifié -- ne transactionne pas les
> méta-opérations (CREATE TABLE, etc), au contraire d'Oracle par exemple.
> Donc activer les transactions ne sert pas à grand chose dans ce cas.
> Par contre, il faudrait rendre atomique le DROP test; ALTER TABLE test_
> ...
>
> Malheureusement à ma connaissance c'est impossible avec PostgreSQL. Il y aura donc une
> fenêtre de vulnérabilité où d'autres backend ne verront plus de table
> test.
ennuyeux tout ca.. je vais verifier..
en tout cas le code:
DROP TABLE test;
DROP TABLE new_test;
CREATE TABLE test (id serial NOT NULL UNIQUE, nom varchar(32));
INSERT INTO test ("nom") values ('cedric');
INSERT INTO test ("nom") values ('felix');
INSERT INTO test ("nom") values ('julien');
CREATE TABLE new_test (id serial NOT NULL UNIQUE, nom varchar(32));
INSERT INTO new_test SELECT * FROM test;
SELECT setval('new_test_id_seq',3);
BEGIN;
DROP TABLE test;
ALTER TABLE new_test RENAME TO test;
ABORT;
a l'air de parfaitemnt fonctionner. Si ``ALTER TABLE new_test RENAME TO test;'' travaille sur les meta-donnees..alors postgres est peut-etre capable de faire des operations atomique sur les metadonnees.!
> > P.-S. desole pour les caractere accentues qui se transforme dans mon mutt en ``?''. Probleme
> > de conf. peut-etre ?
>
> export LC_CTYPE=fr_CH.ISO8859-1 # et avoir généré cette locale avec dpkg-reconfigure locales
naon, mais j'ai essaye le LC_CTYPE=fr_CH.UTF-8 et ca marche du tonnerre... bbbbbrrrroum ! enfin..
Ced.
--
Cedric BRINER
More information about the gull
mailing list