2010-09-27 5 views
24

Je sais que dans SQL on peut comprimer le champ de texte comme ce qui suit:compression de texte dans PostgreSQL

CREATE TABLE TableName (FieldName CHARACTER(255) WITH COMPRESSION); 

Je veux savoir comment atteindre la compression de texte dans Postgres.

+0

Pour stocker la chaîne compressée, voir aussi http://stackoverflow.com/q/2958073/287948 –

Répondre

26

La compression est activée par défaut pour tous les types de chaînes, vous n'avez pas besoin de dire à la base de données de le faire. Consultez le manuel sur les TOAST

  • PLAIN empêche soit la compression ou stockage hors-ligne; en outre, il désactive l'utilisation des en-têtes à un octet pour les types varlena. C'est la seule stratégie possible pour les colonnes de types de données non-TOAST.
  • EXTENDED permet à la fois la compression et le stockage hors ligne . Ceci est le par défaut pour la plupart des types de données TOAST- . La compression sera tentée d'abord, puis le stockage hors ligne si la ligne est encore trop grande.
  • EXTERNAL permet le stockage hors ligne mais pas la compression. Utilisation des EXTERNE fera des opérations sous-chaînes sur texte large et colonnes bytea plus rapide (à la peine de stockage accrue espace), car ces opérations sont optimisées pour récupérer uniquement les nécessaires parties de la valeur hors ligne lorsque ce n'est pas compressé.
  • MAIN permet la compression mais pas le stockage hors ligne . (En fait, hors ligne de stockage sera toujours réalisé pour de telles colonnes, mais seulement en dernier recours quand il n'y a pas autre façon de faire de la ligne petite assez pour tenir sur une page.)
+5

Des docs, il semble que la compression TOAST soit active uniquement pour les valeurs supérieures à 2kb. L'exemple de l'OP n'atteindrait pas le seuil de 2k et ne serait donc pas compressé. –

+0

Vous pouvez appliquer la compression, dépend des paramètres de stockage: http://www.postgresql.org/docs/current/interactive/storage-toast.html –

+1

En modifiant TOAST_TUPLE_THRESHOLD? Je pense que cela nécessite une recompilation? –