J'ai essayé ce qui suit, mais je n'ai pas réussi:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
sql
database
postgresql
alter-table
Huuuze
la source
la source
Réponses:
" Modifier la position de la colonne " dans le wiki PostgreSQL dit:
C'est assez faible, mais pour leur défense, en SQL standard, il n'y a pas non plus de solution pour repositionner une colonne. Les marques de base de données qui prennent en charge la modification de la position ordinale d'une colonne définissent une extension de la syntaxe SQL.
Une autre idée me vient à l'esprit: vous pouvez définir un
VIEW
qui spécifie l'ordre des colonnes comme vous l'aimez, sans changer la position physique de la colonne dans la table de base.la source
Dans PostgreSQL, lors de l'ajout d'un champ, il serait ajouté à la fin de la table. Si nous devons insérer dans une position particulière, alors
la source
Ce message est ancien et probablement résolu mais j'ai eu le même problème. Je l'ai résolu en créant une vue de la table d'origine spécifiant le nouvel ordre des colonnes.
De là, je pourrais utiliser la vue ou créer une nouvelle table à partir de la vue.
Renommez ou supprimez la table d'origine et définissez le nom de la nouvelle table sur l'ancienne table.
la source
Une option, bien que maladroite, pour réorganiser les colonnes lorsque l'ordre des colonnes doit absolument être changé et que des clés étrangères sont utilisées, consiste à d'abord vider la base de données entière avec les données, puis à vider uniquement le schéma (
pg_dump -s databasename > databasename_schema.sql
). Modifiez ensuite le fichier de schéma pour réorganiser les colonnes comme vous le souhaitez, puis recréez la base de données à partir du schéma et restaurez enfin les données dans la base de données nouvellement créée.la source
Je ne pense pas que vous le puissiez pour le moment: voir cet article sur le wiki PostgreSQL .
Les trois solutions de contournement de cet article sont:
la source
Ouvrez la table dans PGAdmin et dans le volet SQL en bas, copiez l'instruction SQL Create Table. Ensuite, ouvrez l'éditeur de requêtes et collez. Si la table contient des données, remplacez le nom de la table par «nouveau_nom», sinon supprimez le commentaire «-» dans la ligne Drop Table. Modifiez la séquence de colonnes selon vos besoins. Faites attention à la virgule manquante / superflue dans la dernière colonne au cas où vous l'auriez déplacée. Exécutez la nouvelle commande SQL Create Table. Rafraîchissez-vous et ... voilà.
Pour les tables vides au stade de la conception, cette méthode est assez pratique.
Si la table contient des données, nous devons également réorganiser la séquence des colonnes des données. C'est simple: utilisez
INSERT
pour importer l'ancienne table dans sa nouvelle version avec:... où
c2
,c3
,c1
sont les colonnesc1
,c2
,c3
de la vieille table dans leurs nouvelles fonctions. Veuillez noter que dans ce cas, vous devez utiliser un «nouveau» nom pour la table «ancienne» modifiée, sinon vous perdrez vos données . Dans le cas où les noms de colonnes sont nombreux, longs et / ou complexes, utilisez la même méthode que ci-dessus pour copier la nouvelle structure de table dans un éditeur de texte et créez-y la nouvelle liste de colonnes avant de la copier dans l'INSERT
instruction.Après avoir vérifié que tout va bien,
DROP
utilisez l'ancienne table et changez le nom «nouveau» en «ancien»ALTER TABLE new RENAME TO old;
et vous avez terminé.la source
Je travaillais à réorganiser de nombreuses tables et je ne voulais pas avoir à écrire les mêmes requêtes encore et encore, alors j'ai créé un script pour tout faire pour moi. Essentiellement, il:
pg_dump
pg_dump
requête d' origine pour créer une table réorganisée avec des donnéesIl peut être utilisé en exécutant la commande simple suivante:
Il imprime le sql afin que vous puissiez le vérifier et le tester, c'est une grande raison sur laquelle je l'ai basé
pg_dump
. Vous pouvez trouver le dépôt github ici .la source
J'utilise Django et il nécessite une colonne id dans chaque table si vous ne voulez pas avoir mal à la tête. Malheureusement, j'étais imprudent et ma table bp.geo_location_vague ne contenait pas ce champ. J'ai paraphé un petit truc. Étape 1:
Étape 2: (sans créer de table - la table se créera automatiquement!)
Étape 3:
Parce que j'ai besoin d'un pseudotype bigserial dans le tableau. Après SELECT * dans pg, vous créerez le type bigint insetad bigserial.
étape 4: Nous pouvons maintenant supprimer la vue, supprimer la table source et renommer la nouvelle table avec l'ancien nom. L'astuce s'est terminée avec succès.
la source
Il existe quelques solutions de contournement pour rendre cela possible:
Recréer toute la table
Créer de nouvelles colonnes dans la table actuelle
Créer une vue
https://tableplus.com/blog/2018/09/postgresql-is-it-possible-to-alter-column-order-position-in-a-table.html
la source