Intenté lo siguiente, pero no tuve éxito:
ALTER TABLE person ALTER COLUMN dob POSITION 37;
sql
database
postgresql
alter-table
Huuuze
fuente
fuente
Respuestas:
" Alterar la posición de la columna " en el Wiki de PostgreSQL dice:
Eso es bastante débil, pero en su defensa, en SQL estándar, tampoco hay una solución para reposicionar una columna. Las marcas de bases de datos que admiten el cambio de la posición ordinal de una columna están definiendo una extensión de la sintaxis SQL.
Se me ocurre otra idea: puedes definir un
VIEW
que especifique el orden de las columnas como más te guste, sin cambiar la posición física de la columna en la tabla base.fuente
En PostgreSQL, al agregar un campo, se agregaría al final de la tabla. Si necesitamos insertar en una posición particular, entonces
fuente
Esta publicación es antigua y probablemente esté resuelta, pero tuve el mismo problema. Lo resolví creando una vista de la tabla original especificando el nuevo orden de columna.
Desde aquí, podría usar la vista o crear una nueva tabla desde la vista.
Cambie el nombre o elimine la tabla original y establezca el nombre de la tabla nueva en la tabla anterior.
fuente
Una, aunque una opción torpe para reorganizar las columnas cuando el orden de las columnas debe cambiarse absolutamente y las claves externas están en uso, es primero volcar toda la base de datos con datos y luego volcar solo el esquema (
pg_dump -s databasename > databasename_schema.sql
). A continuación, edite el archivo de esquema para reorganizar las columnas como desee, luego vuelva a crear la base de datos a partir del esquema y, finalmente, restaure los datos en la base de datos recién creada.fuente
No creo que pueda en este momento: vea este artículo en la wiki de Postgresql .
Las tres soluciones alternativas de este artículo son:
fuente
Abra la tabla en PGAdmin y en el panel SQL en la parte inferior copie la declaración SQL Create Table. Luego abra la Herramienta de consulta y péguela. Si la tabla tiene datos, cambie el nombre de la tabla a 'new_name', de lo contrario, elimine el comentario "-" en la línea Drop Table. Edite la secuencia de columnas según sea necesario. Tenga en cuenta la coma faltante / superflua en la última columna en caso de que la haya movido. Ejecute el nuevo comando SQL Create Table. Refresca y ... voilà.
Para tablas vacías en la etapa de diseño, este método es bastante práctico.
En caso de que la tabla tenga datos, también debemos reorganizar la secuencia de columnas de los datos. Esto es fácil: use
INSERT
para importar la tabla anterior a su nueva versión con:... donde
c2
,c3
,c1
son las columnasc1
,c2
,c3
de la mesa de edad en sus nuevas posiciones. Tenga en cuenta que en este caso debe utilizar un nombre "nuevo" para la tabla "antigua" editada o perderá sus datos . En caso de que los nombres de las columnas sean muchos, largos y / o complejos, use el mismo método que el anterior para copiar la nueva estructura de la tabla en un editor de texto y cree la nueva lista de columnas allí antes de copiarla en laINSERT
declaración.Después de comprobar que todo está bien,
DROP
utilice la tabla antigua y cambie el nombre 'nuevo' a 'antiguo'ALTER TABLE new RENAME TO old;
y ya está.fuente
Estaba trabajando en reordenar muchas tablas y no quería tener que escribir las mismas consultas una y otra vez, así que hice un script para hacerlo todo por mí. Esencialmente,
pg_dump
pg_dump
consulta original para crear una tabla reordenada con datos.Se puede utilizar ejecutando el siguiente comando simple:
Imprime el sql para que pueda verificarlo y probarlo, esa fue una gran razón en la que lo basé
pg_dump
. Puedes encontrar el repositorio de github aquí .fuente
Yo uso Django y requiere una columna de identificación en cada tabla si no quieres tener un dolor de cabeza. Desafortunadamente, fui descuidado y mi tabla bp.geo_location_vague no contenía este campo. Puse mis iniciales en un pequeño truco. Paso 1:
Paso 2: (sin crear tabla, ¡la tabla se creará automáticamente!)
Paso 3:
Porque necesito tener un pseudotipo de serie grande en la mesa. Después de SELECCIONAR * en pg, se creará un tipo bigint insertado en bigserial.
Paso 4: Ahora podemos eliminar la vista, eliminar la tabla de origen y cambiar el nombre de la nueva tabla con el nombre anterior. El truco se terminó con éxito.
fuente
Hay algunas soluciones para hacerlo posible:
Recreando toda la mesa
Crea nuevas columnas dentro de la tabla actual
Crea una vista
https://tableplus.com/blog/2018/09/postgresql-is-it-possible-to-alter-column-order-position-in-a-table.html
fuente