Le stockage physique des lignes est décrit dans les documents de la mise en page de la base de données . Le contenu de la colonne pour la même ligne est tous stockés dans la même page de disque, à l'exception notable du contenu éd de TOAST (trop grand pour tenir dans une page). Le contenu est extrait séquentiellement dans chaque ligne, comme expliqué:
Pour lire les données, vous devez examiner chaque attribut tour à tour. Vérifiez d'abord si le champ est NULL selon le bitmap nul. Si c'est le cas, passez à la suivante. Assurez-vous ensuite d'avoir le bon alignement. Si le champ est un champ à largeur fixe, tous les octets sont simplement placés.
Dans le cas le plus simple (pas de colonnes TOAST), postgres récupérera la ligne entière même si quelques colonnes sont nécessaires. Donc, dans ce cas, la réponse est oui, avoir plus de colonnes peut avoir un impact négatif clair sur le cache de tampon de gaspillage, en particulier si le contenu des colonnes est important tout en restant sous le seuil TOAST.
Maintenant, le cas TOAST: lorsqu'un champ individuel dépasse ~ 2 Ko, le moteur stocke le contenu du champ dans une table physique distincte. Il entre également en jeu lorsque la ligne entière ne tient pas dans une page (8 Ko par défaut): certains des champs sont déplacés vers le stockage TOAST. Doc dit:
Si c'est un champ de longueur variable (attlen = -1), c'est un peu plus compliqué. Tous les types de données de longueur variable partagent la structure de structure d'en-tête commune varlena, qui inclut la longueur totale de la valeur stockée et certains bits d'indicateur. Selon les indicateurs, les données peuvent être soit en ligne, soit dans une table TOAST; il pourrait aussi être compressé
Les contenus TOAST ne sont pas récupérés lorsqu'ils ne sont pas explicitement nécessaires, leur effet sur le nombre total de pages à récupérer est donc faible (quelques octets par colonne). Cela explique les résultats dans la réponse de @ dezso.
En ce qui concerne les écritures, chaque ligne avec toutes ses colonnes est entièrement réécrite à chaque MISE À JOUR, quelles que soient les colonnes modifiées. Donc, avoir plus de colonnes est évidemment plus coûteux pour les écritures.