estoy queriendo lo mismo. Sí, la orden ahora esencial, pero sólo me roza el camino equivocado :)
Lo que estoy haciendo para resolverlo es la siguiente.
Este método será asegurarse de que mantener todos los datos existentes,
- crear una nueva versión de la tabla con el pedido que quiero, usando un nombre temporal.
- Insertar todos los datos en que la nueva tabla de la existente.
- Suelta la tabla anterior.
- Cambiar el nombre de la nueva tabla para el "nombre propio" de "nombre temporal".
- Vuelva a agregar los índices que tenía anteriormente.
- Restablecer secuencia de ID para incrementos de tecla primaria.
actual orden de la tabla:
id, name, email
1. Crear una nueva versión de la tabla utilizando el orden que quiera, utilizando un nombre temporal.
En este ejemplo, quiero que email
sea anterior a name
.
CREATE TABLE mytable_tmp
(
id SERIAL PRIMARY KEY,
email text,
name text
);
2. Insertar los datos en esa nueva tabla de la existente.
INSERT INTO mytable_tmp --- << new tmp table
(
id
, email
, name
)
SELECT
id
, email
, name
FROM mytable; --- << this is the existing table
3. La caída de la mesa de edad.
DROP TABLE mytable;
4. Cambiar el nombre de la nueva tabla con el "nombre propio" de "nombre temporal".
ALTER TABLE mytable_tmp RENAME TO mytable;
5. Vuelva a agregar cualquier índice que tenía anteriormente.
CREATE INDEX ...
6. secuencia ID Reset durante incrementos de clave primaria.
SELECT setval('public.mytable_id_seq', max(id)) FROM mytable;
Esto es muy complicado, varios objetos del sistema se refieren a un número de columna. Cuando voltea las columnas 2 y 3, tendrá problemas cuando un objeto necesita algo de la columna 2. Esto ahora es nr. 3 y su base de datos ahora está dañado. Eche un vistazo a pg_constraint, esto puede ser un protector de base de datos. –
De esta manera pierde todos los datos en su pestaña les. –
Además de no ser compatible, esta técnica intercambia los nombres de columna sin respetar sus contenidos, lo cual (a pesar de que la respuesta sea aceptada) no es lo que la pregunta está haciendo. Y si lo estaba pidiendo, se debe usar 'ALTER TABLE ... RENAME COLUMN ...' en su lugar, ya que logra el mismo resultado pero de manera confiable. –