Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 Re : Général » Comparaison taille table/colonne INTEGER ET VARCHAR » 29/06/2020 07:55:57
Bonjour,
Vous pouvez oublier mon dernier message, je me suis embrouillé en calculant par rapport au %age/ratio. Les entêtes expliquent complètement les tailles que j'obtiens et les diffférences entre INT et VARCHAR.
Merci pour votre réponse !
Julien.
#2 Re : Général » Comparaison taille table/colonne INTEGER ET VARCHAR » 26/06/2020 12:58:59
Merci pour votre réponse !
Je vais re-regarder en détail le lien vers la doc, ça ne fera pas de mal de revoir tout ça
Par contre par rapport à ces "frais fixes", en sachant qu'ils sont censés être les mêmes pour les 2 tables, je ne m'explique toujours pas pourquoi la table avec un varchar(22) prend 50% environ de place en plus alors que l'espace pour un varchar(22) est 6 fois plus important que pour un int ?
Julien.
#3 Général » Comparaison taille table/colonne INTEGER ET VARCHAR » 26/06/2020 10:27:36
- Juju
- Réponses : 3
Bonjour à tous,
Je suis sur Postgres v11.6 sous CentOS. Je créé ce sujet parce que je n'arrive pas à trouver l'explication sur la différence entre les tailles de 2 tables. Voici le test :
create table t_i(id integer);
insert into t_i select generate_series(1,500000);
create table t_v(id varchar(22));
with cpt as (select generate_series(0,500000) as i) insert into t_v select UUIDToBase62(replace(uuid_generate_v4()::varchar,'-','')) from cpt;
select count(*) from t_i; -- 500000
select count(*) from t_v; -- 500000
select pg_size_pretty(pg_relation_size('t_i')); -- 17 MB
select pg_size_pretty(pg_relation_size('t_v')); -- 25 MB
select pg_size_pretty(pg_total_relation_size('t_i')); -- 17 MB
select pg_size_pretty(pg_total_relation_size('t_v')); -- 25 MB
select pg_size_pretty(sum(pg_column_size(id))) from t_i; -- 1953 kB
select pg_size_pretty(sum(pg_column_size(id))) from t_v; -- 11 MB
Je m'attendais à ce qu'il y ait une différence plus importante sur la taille des tables, qui serait cohérent avec la différence de taille entre les 2 colonnes id integer et varchar (facteur 6, alors que sur la table on a 50% en plus environ).
Pour info dans la colonne varchar la taille oscille entre 19 et 22 caractères.
Merci !
Julien.
#4 Re : Général » Appel en boucle d'une procédure stockée » 31/01/2020 16:18:16
Bonjour,
Merci pour votre retour, je vais effectivement partir sur une solution hors DB, à priori plutôt un script python.
Merci.
Julien.
#5 Général » Appel en boucle d'une procédure stockée » 29/01/2020 16:24:22
- Juju
- Réponses : 2
Bonjour à tous,
OS : CentOS 7.6.1810
Postgres v11.5
Je souhaiterais faire un truc tout bête : appeler une procédure stockée toutes les 50 ou 100 ms. J'ai regardé du côté de cron ou pg_cron mais le minimum est de 1 minute.
J'ai testé une solution un peu rapide/bourrin : j'ai créé une 2ème procédure stockée, que je lance en arrière plan avec psql, qui boucle à l'infini, appelle la 1ère procédure puis fait un pg_sleep, et donc tout ça à l'infini, mais au bout d'un moment j'ai un out of memory (je n'ai pas encore creusé pourquoi).
Quelle solution serait la plus simple à mettre en place et aussi facile à monitorer (pour lever une alerte en cas de plantage) ?
Merci pour vos suggestions.
Julien.
#6 Re : PL/pgSQL » Liste des géométries des tables d'un schema - PG 9.6 » 27/01/2020 13:32:26
Bonjour,
Je ne sais pas si c'est ce que vous cherchez, mais avec PostGIS vous avez une vue : geometry_columns (qui par défaut se trouve dans le schéma public) et qui contient toutes les colonnes geometries.
Julien.
#7 Re : PL/pgSQL » Trigger d'audit : déterminer les colonnes qui ont été modifiées » 06/01/2020 11:27:50
Bonjour,
Merci pour votre réponse, je ne connaissais pas le IS DISTINCT FROM (qui rend l'écriture de la condition moins lourde !!).
Je vais regarder du côté de ces extensions, j'avais entendu parler de E-maj mais pas de l'autre, je dois formater les données d'une façon bien précise donc je ne sais pas si ça répondra à mon besoin.
Merci et bonne journée.
Julien.
#8 PL/pgSQL » Trigger d'audit : déterminer les colonnes qui ont été modifiées » 03/01/2020 19:01:42
- Juju
- Réponses : 2
Bonjour à tous,
Petite prise de tête du vendredi
Je suis en Postgres v11.5 sous CentOS.
Je veux écrire un trigger qui lors d'un update sur une table stockerait dans une autre table (dans un jsonb) seulement les valeurs réellement modifiées.
J'ai pour cela créé un trigger (for each statement) et ma fonction trigger. J'essaye de trouver la méthode la moins lourde à mettre en place (sachant que potentiellement je vais devoir faire cet audit sur pas mal d'autres tables). Pour l'instant, à part comparer les colonnes 1 à 1 entre anciennes et nouvelles lignes je ne vois rien de plus rapide à écrire. L'idéal serait une façon plus générique ou dynamique de faire ça mais je bloque un peu là. Si quelqu'un a une idée je suis preneur ! Pour info la table contient des colonnes de tous types (integer, varchar, date, double , geometry). Pour les colonnes nullable je pourrais utiliser COALESCE mais le problème c'est que je ne maitrise pas forcément ce qui peut être rentrée dans certaines colonnes donc ça me semblait plus sûr avec cette méthode.
CREATE OR REPLACE FUNCTION MySchema.MyFunction() RETURNS TRIGGER AS $BODY$
DECLARE
oldRow RECORD;
newRow RECORD;
BEGIN
-- For each row, we will compare each attribute and store in the event only ones that have changed
FOR oldRow IN SELECT * FROM old_rows
LOOP
SELECT * INTO newRow FROM new_rows WHERE id = oldRow.id;
-- For not null columns
IF oldRow.col1 <> newRow.col1 THEN
raise notice 'col1 changed';
END IF;
-- For null columns
IF oldRow.col2 <> newRow.col2
OR oldRow.col2 is null and newRow.col2 is not null
OR oldRow.col2 is not null and newRow.col2 is null THEN
raise notice 'col2 changed';
END IF;
-- Etc...
END LOOP;
RETURN NULL;
END;
$BODY$ LANGUAGE plpgsql;
CREATE TRIGGER MyTrigger
AFTER UPDATE ON MyTable
REFERENCING OLD TABLE AS old_rows NEW TABLE AS new_rows
FOR EACH STATEMENT EXECUTE FUNCTION MySchema.MyFunction();
Merci d'avance !
Julien.
#9 Re : Général » Sauvegarde à chaud - Question » 19/03/2018 22:15:08
Bonjour,
Merci pour votre réponse c'est plus clair. Effectivement sans les WAL générés pendant le backup la copie ne servira pas à grand chose
Encore merci.
Julien.
#10 Re : Général » Current querry postgres 8.4 » 19/03/2018 17:30:51
Dans ce cas il ne doit y avoir aucune requête en cours, d'où le <IDLE> dans current_query.
NB : je viens de voir que depuis la 9.2 la colonne current_query a été remplacée par 2 colonnes (state et query), ce qui fait que même pour une session IDLE on peut avoir sa dernière requête dans query, alors que dans votre cas on a juste <IDLE>.
Julien.
#11 Re : Général » Current querry postgres 8.4 » 19/03/2018 17:02:39
Bonjour,
Je dirais que votre user n'est pas superuser à priori. D'après la doc : "The columns that report data on the current query are available unless the parameter track_activities has been turned off. Furthermore, these columns are only visible if the user examining the view is a superuser or the same as the user owning the process being reported on".
Julien.
#12 Général » Sauvegarde à chaud - Question » 19/03/2018 16:58:05
- Juju
- Réponses : 2
Bonjour,
J'ai une question concernant la sauvegarde à chaud avec Postgres (v9.5 et plus). Une fois que la commande pg_start_backup() a été exécutée, on peut copier tous les fichiers de l'instance nécessaires à une restauration. Sachant que pendant la sauvegarde les écritures se font toujours dans la répertoire data, comment Postgres fait-il pour que les fichiers copiés soient utilisables alors que potentiellement ils peuvent être modifiés pendant la copie ? J'ai lu que pg_start_backup force des "full page writes" (activé par défaut) jusqu'à l'exécution de pg_stop_backup(), c'est grâce à cela que lors de la restauration il peut remettre les fichiers (notamment ceux des tables par exemple) comme il faut ? En réécrivant en entier les blocks à restaurer ?
Merci.
Coridalement.
#13 Re : Migration » De Oracle à PG : trigger d'archivage » 08/11/2016 11:23:04
Bonjour,
Effectivement je n'avais pas vu cette option dans la doc, ça marche parfaitement avec. Merci beaucoup !
#14 Migration » De Oracle à PG : trigger d'archivage » 07/11/2016 17:27:17
- Juju
- Réponses : 2
Bonjour à tous,
Je suis en train de faire une migration Oracle (11gr2) vers PostgreSQL (9.5.4) et j'ai commencé à réécrire un certain nombre de trigger en PL/pgSQL, et je rencontre un problème avec un trigger en particulier.
Supposons que j'ai un schéma A avec une table T1, et un schéma B avec une table T2 ayant la même structure que T1. T2 est une table qui va contenir les lignes supprimées de T1. J'ai donc un trigger after delete sur T1 qui fait juste un insert select OLD.* dans T2.
Le user qui exécute le delete dans T1 a uniquement des droits sur T1, et pas sur T2. Ça marchait comme ceci sous Oracle, et sous PG je suis obligé de donner au user des droits en écriture sur T2 pour que le trigger s'exécute. Y-a-t-il moyen d'empêcher ça ? Parce que je ne veux pas que le user puisse écrire directement dans T2.
Merci.
Juju.
#15 Re : Migration » Ora2pg : foreign keys entre schémas » 01/08/2016 10:04:34
Bonjour,
Je viens de tester sur une base contenant 2 schemas et quelques tables et je confirme que tout est bon maintenant, j'ai bien les ordres de création des 2 schemas ainsi que toutes les FK entre mes schemas.
Merci encore !
Julien.
#16 Re : Migration » Ora2pg : foreign keys entre schémas » 29/07/2016 17:50:21
Bonjour,
Quelle réactivité !! Merci beaucoup pour ces corrections, je teste tout ça au plus vite et viendrai mettre à jour ce thread.
Merci encore.
Cordialement.
#17 Re : Migration » Ora2pg : foreign keys entre schémas » 29/07/2016 11:51:58
Bonjour,
J'ai fait quelques tests et pour l'instant ce n'est pas concluant. J'ai bien positionné EXPORT_SCHEMA à 1, j'ai enlevé l'option -n, je n'ai pas activé le paramètre SCHEMA dans le .conf, et en sortie j'ai un script contenant toutes les tables de tous mes schémas mais je n'ai plus les ordre de création des schémas (je n'ai pas touché au paramètre CREATE_SCHEMA qui par défaut est activé) et je n'ai toujours pas les foreign keys entre schémas. Je vais continuer à faire des tests (mais avec moins de schémas, parce que du coup l'extraction du DDL par ora2pg met 2h dans cette configuration).
#18 Re : Migration » Ora2pg : foreign keys entre schémas » 26/07/2016 18:11:30
Bonjour,
Effectivement j'exporte les schémas un par un, et c'est en lisant votre réponse que je me rends compte que c'est logique que les foreign keys vers d'autres schémas ne soient pas prises en compte... Je vais tester de les exporter tous à la fois.
Merci beaucoup !
Cordialement.
#19 Migration » Ora2pg : foreign keys entre schémas » 26/07/2016 09:53:23
- Juju
- Réponses : 6
Bonjour à tous,
Je suis en train de faire des tests de migration avec ora2pg v17.4 (depuis 1 base Oracle 11gR2). J'ai dans ma base 1 dizaine de schémas avec des foreign keys entre eux. Je vois que ora2pg ne prend pas ces foreign keys et pour l'instant je n'ai rien trouvé sur la doc ou le net par rapport à ça, savez-vous si une option le permet ?
Merci !
Pages : 1