español ejemplo cast amazon-web-services amazon-redshift

amazon-web-services - español - cast postgresql ejemplo



Alterar tipo de datos de columna en Amazon Redshift (6)

¿Cómo alterar el tipo de datos de columna en la base de datos Amazon Redshift?

No puedo modificar el tipo de datos de la columna en Redshift; ¿Hay alguna manera de modificar el tipo de datos en Amazon Redshift?


Actualmente no hay forma de cambiar una columna en una base de datos de desplazamiento al rojo.

Todo lo que puedo pensar es agregar una nueva columna con un tipo de datos correcto, luego insertar todos los datos de la columna anterior a uno nuevo, y finalmente soltar la columna anterior.

Use un código similar a ese:

ALTER TABLE t1 ADD COLUMN new_column (___correct_column_definition___); UPDATE t1 SET new_column = column; ALTER TABLE t1 DROP COLUMN column; ALTER TABLE t1 RENAME COLUMN new_column TO column;

Habrá un cambio de esquema: la última columna añadida será la última en una tabla (puede ser un problema con la instrucción COPY , téngalo en cuenta; puede definir un orden de columnas con COPY )


Redshift siendo una base de datos en columnas no le permite modificar el tipo de datos directamente, sin embargo, a continuación se muestra un enfoque que cambiará el orden de las columnas.

Pasos -

1. Tabla posterior agregue newcolumn a la tabla 2.Actualice el valor de newcolumn con oldcolumn value 3.Alter table para colocar la columna oldcolumn 4.alter table para cambiar el nombre de columnn a oldcolumn

Si no quiere alterar el orden de las columnas, entonces la solución sería

1.crear tabla temporal con el nuevo nombre de columna

  1. copiar datos de la tabla anterior a la nueva tabla.

  2. soltar mesa vieja

  3. cambiar el nombre de la nueva tabla a oldtable

  4. Una cosa importante es crear una nueva tabla con el comando like en lugar de crear simple.


Si no desea cambiar el orden de las columnas , una opción creará una tabla temporal, soltará y creará la nueva con el tamaño deseado y luego volverá a agrupar los datos.

CREATE TEMP TABLE temp_table AS SELECT * FROM original_table; DROP TABLE original_table; CREATE TABLE original_table ... INSERT INTO original_table SELECT * FROM temp_table;

El único problema al recrear la tabla es que tendrá que otorgar permisos nuevamente y si la tabla es demasiado grande, llevará un poco de tiempo.


para actualizar la misma columna en desplazamiento al rojo esto funcionaría bien

UPDATE table_name SET column_name = ''new_value'' WHERE column_name = ''old_value''

puedes tener varias cláusulas en donde usando y, para eliminar cualquier confusión para sql

¡¡aclamaciones!!


para evitar el cambio de esquema mencionado por Tomasz:

BEGIN TRANSACTION; ALTER TABLE <TABLE_NAME> RENAME TO <TABLE_NAME>_OLD; CREATE TABLE <TABLE_NAME> ( <NEW_COLUMN_DEFINITION> ); INSERT INTO <TABLE_NAME> (<NEW_COLUMN_DEFINITION>) SELECT <COLUMNS> FROM <TABLE_NAME>_OLD; DROP TABLE <TABLE_NAME>_OLD; END TRANSACTION;


ALTER TABLE publisher_catalogs ADD COLUMN new_version integer; update publisher_catalogs set new_version = CAST(version AS integer); ALTER TABLE publisher_catalogs DROP COLUMN version RESTRICT; ALTER TABLE publisher_catalogs RENAME new_version to version;