Este documento forma parte de una serie que proporciona información y directrices clave relacionadas con la planificación y la realización de migraciones de bases de datos Oracle® 11g/12c a la versión 12 de Cloud SQL para PostgreSQL. Además de la parte de configuración inicial, la serie incluye las siguientes partes:
- Migrar usuarios de Oracle a Cloud SQL para PostgreSQL: terminología y funciones
- Migrar usuarios de Oracle a Cloud SQL para PostgreSQL: tipos de datos, usuarios y tablas (este documento)
- Migrar usuarios de Oracle a Cloud SQL para PostgreSQL: consultas, procedimientos almacenados, funciones y activadores
- Migrar usuarios de Oracle a Cloud SQL para PostgreSQL: seguridad, operaciones, monitorización y registro
- Migrar usuarios y esquemas de bases de datos de Oracle a Cloud SQL para PostgreSQL
Tipos de datos
Cloud SQL para PostgreSQL proporciona varios tipos de datos que son totalmente equivalentes o similares a los tipos de datos proporcionados por Oracle. En la siguiente tabla se indican los tipos de datos de PostgreSQL más habituales, seguidos de una comparación entre los tipos de datos primitivos de Oracle y los tipos de datos correspondientes de Cloud SQL para PostgreSQL. Cuando no se admite un tipo de datos, se indica un tipo de datos alternativo.
Tipos de datos primitivos de Cloud SQL para PostgreSQL 12
Familia de tipos de datos de Cloud SQL para PostgreSQL | Nombre del tipo de datos de Cloud SQL para PostgreSQL | Especificación del tipo de datos |
---|---|---|
Cadena o carácter | CHAR(n) |
Almacena exactamente n caracteres. Alias de
CHARACTER(n) . |
CHARACTER(n) |
Almacena exactamente n caracteres. |
|
VARCHAR(n) |
Almacena un número variable de caracteres, hasta un máximo de n caracteres. Alias de CHARACTER
VARYING(n) . |
|
CHARACTER VARYING(n) |
Almacena un número variable de caracteres, hasta un máximo de n caracteres. |
|
TEXT |
Variante específica de VARCHAR que no requiere que especifiques un límite superior en el número de caracteres. La cadena de caracteres más larga que se puede almacenar es de 1 GB (lo mismo ocurre con todos los tipos de datos de caracteres de cadena). |
|
Numérico | SMALLINT |
El valor mínimo es -32768 y el máximo, 32767. |
INTEGER |
El valor mínimo es -2147483648 y el máximo, 2147483647. | |
BIGINT |
El valor mínimo es -2^63 y el máximo es 2^63-1. | |
REAL |
Número de punto flotante de precisión simple (4 bytes). | |
DOUBLE PRECISION |
Número de punto flotante de doble precisión (8 bytes). | |
DECIMAL (p,s) |
Puede almacenar cualquier valor con p dígitos y s decimales. |
|
NUMERIC(p,s) |
Puede almacenar cualquier valor con p dígitos y s decimales. |
|
SMALLSERIAL |
Número entero de incremento automático. El valor mínimo es 1 y el máximo, 32.767. | |
SERIAL |
Número entero de incremento automático. El valor mínimo es 1 y el máximo, 2147483647. | |
BIGSERIAL |
Número entero de incremento automático. El valor mínimo es 1 y el máximo es 2^63-1. | |
Monetary | MONEY |
Importe de moneda con una precisión fraccionaria fija. El valor mínimo es -92233720368547758,08 y el máximo es +92233720368547758,07. |
Fecha y hora | DATE |
- Valores con una parte de fecha, pero sin parte de hora. - El intervalo admitido es del 4713 a. C. al 5874897 d. C., con una resolución de 1 día. |
TIMESTAMP (p) |
- Valores que contienen tanto la fecha como la hora. - El intervalo admitido es del 4713 a. C. al 294276 d. C. - La resolución es de p dígitos fraccionarios en segundos
(o 1 microsegundo si no se especifica). |
|
TIMESTAMP (p) with time zone |
- Valores que contengan la fecha, la hora y la zona horaria. - El intervalo admitido es del 4713 a. C. al 294276 d. C. - La resolución es de p dígitos fraccionarios en segundos
(o 1 microsegundo si no se especifica). |
|
TIME (p) |
- Valores con una parte de hora, pero sin parte de fecha. - El intervalo admitido es de 00:00:00 a 24:00:00. - La resolución es de p dígitos fraccionarios en segundos
(o 1 microsegundo si no se especifica). |
|
TIME (p) with time zone |
- Valores con una hora y una zona horaria, pero sin parte de fecha. - El intervalo admitido es de 00:00:00 a 24:00:00. - La resolución es de p dígitos fraccionarios en segundos
(o 1 microsegundo si no se especifica). |
|
INTERVAL (p) |
- Intervalo de tiempo - El intervalo admitido es de -178.000.000 a 178.000.000 años. - La resolución es de p dígitos fraccionarios en segundos
(o 1 microsegundo si no se especifica). |
|
JSON | JSON |
Datos JSON textuales. |
JSONB |
Datos JSON binarios. | |
XML | XML |
Datos XML. |
Geométrico |
GEOMETRY |
El tipo de columna que se debe especificar cuando se quieran usar los siguientes modelos de datos. |
POINT |
Valor de (x,y) . |
|
LINE |
Una tupla (A, B, C) en la que Ax +
By + C = 0 , A y B no son 0.O BIEN Punto 1 y punto 2 en los siguientes formatos:
|
|
LSEG |
Un segmento de línea ((x1,y1),(x2,y2)) . |
|
BOX |
Caja rectangular ((x1,y1),(x2,y2)) . |
|
PATH |
Una secuencia de puntos ((x1,y1),...) . |
|
POLYGON |
Una secuencia de puntos, que es como un trazado cerrado. | |
CIRCLE |
(x,y),r) (punto central y radio) |
|
Lógico | BOOLEAN |
- Contiene un valor verdadero, falso o nulo. - Acepta valores como yes , true ,
t , on y 1 como verdaderos. |
Datos binarios o de bits | BIT (n) |
Cadena de bits de longitud fija. |
BYTEA |
Datos binarios o matriz de bytes. | |
Tipos de direcciones de red | CIDER |
Redes IPv4 e IPv6. |
INET |
Hosts y redes IPv4 e IPv6. | |
MACADDR |
Direcciones MAC. | |
MACADDR8 |
Direcciones MAC (formato EUI-64). | |
Otros | PG_LSN |
Número de secuencia de registro de Cloud SQL para PostgreSQL. |
TSQUERY |
Consulta de búsqueda de texto. | |
TSVECTOR |
Buscar texto en un documento. | |
TXID_SNAPSHOT |
Instantánea del ID de transacción a nivel de usuario. | |
UUID |
Identificador único universal. |
Conversión de tipos de datos de Oracle a Cloud SQL para PostgreSQL
Familia de tipos de datos de Oracle | Nombre del tipo de datos de Oracle | Especificación del tipo de datos de Oracle | Equivalente de Cloud SQL para PostgreSQL en Oracle | Alternativa o equivalente de Cloud SQL para PostgreSQL |
---|---|---|---|---|
Cadena o carácter | CHAR(n) |
Tamaño máximo de 2000 bytes. | Sí | CHAR(n) |
CHARACTER(n) |
Tamaño máximo de 2000 bytes. | Sí | CHARACTER(n) |
|
NCHAR(n) |
Tamaño máximo de 2000 bytes. | No | CHAR(n) |
|
VARCHAR(n) |
Tamaño máximo de 2000 bytes. | Sí | VARCHAR(n) |
|
NCHAR VARYING(n) |
Cadena UTF-8 de longitud variable. Tamaño máximo de 4000 bytes. |
No | CHARACTER VARYING(n) |
|
VARCHAR2(n)
11g |
Tamaño máximo de 4000 bytes y tamaño máximo de 32 KB en PL/SQL. | Sí* | VARCHAR(n) |
|
VARCHAR2(n) |
Tamaño máximo de 32.767 bytes MAX_STRING_SIZE= EXTENDED . |
Sí* | VARCHAR(n) |
|
NVARCHAR2(n) |
Tamaño máximo de 4000 bytes. | No | VARCHAR(n) |
|
LONG |
Tamaño máximo de 2 GB. | Sí* | TEXT |
|
RAW(n) |
Tamaño máximo de 2000 bytes. | Sí* | BYTEA |
|
LONG RAW |
Tamaño máximo de 2 GB. | Sí* | BYTEA |
|
Numérico | NUMBER |
Número de punto flotante. | Sí* | NUMERIC(p,s) |
NUMBER(*) |
Número de punto flotante. | Sí* | DOUBLE PRECISION |
|
NUMERIC(p,s) |
La precisión puede oscilar entre 1 y 38. | Sí | NUMERIC(p,s) |
|
FLOAT(p,s) |
Número de punto flotante. | Sí* | DOUBLE PRECISION |
|
DEC(p,s) |
Número de punto fijo. | Sí | DEC(p,s) |
|
DECIMAL(p,s) |
Número de punto fijo. | Sí | DECIMAL(p,s) |
|
INT |
Número entero de 38 dígitos. | Sí | INT |
|
INTEGER |
Número entero de 38 dígitos. | Sí | INTEGER |
|
SMALLINT |
Número entero de 38 dígitos. | Sí | SMALLINT |
|
REAL |
Número de punto flotante. | Sí* | DOUBLE PRECISION |
|
DOUBLE PRECISION |
Número de punto flotante. | Sí | DOUBLE PRECISION |
|
Fecha y hora | DATE |
Almacena datos de fecha y hora (año, mes, día, hora, minuto y segundo). | Sí* | TIMESTAMP(0) |
TIMESTAMP(p) |
Fecha y hora con fracción. | Sí | TIMESTAMP(p) |
|
TIMESTAMP(p) WITH TIME ZONE |
Fecha y hora con fracción y zona horaria. | Sí | TIMESTAMP (p) WITH TIME ZONE |
|
INTERVAL YEAR(p) TO MONTH |
Intervalo de fechas. | Sí* | INTERVAL YEAR TO MONTH |
|
INTERVAL DAY(p) TO SECOND(s) |
Intervalo de día y hora. | Sí* | INTERVAL DAY TO SECOND(s) |
|
Lógico | BOOLEAN |
Valores TRUE , FALSE y NULL . No se puede asignar a una columna de tabla de base de datos. |
Sí | BOOLEAN |
XML | XMLTYPE |
Datos XML. | No | XML |
LOB | BFILE |
Puntero a un archivo binario con un tamaño máximo de 4 GB. | No | VARCHAR(255) |
CLOB |
Objeto grande de caracteres con un tamaño máximo de archivo de 4 GB. | No | TEXT |
|
BLOB |
Objeto binario grande con un tamaño máximo de 4 GB. | No | BYTEA |
|
NCLOB |
Cadena Unicode de longitud variable con un tamaño máximo de archivo de 4 GB. | No | TEXT |
|
ROWID | ROWID |
Dirección física de la fila. | No | CTID |
UROWID(n) |
ID de fila universal de las direcciones de fila lógicas. | No | CTID |
|
Espacial | SDO_ GEOMETRY |
Descripción geométrica de un objeto espacial. | Sí | Postgres tiene varios tipos de geometría, como point ,
line , path ,
polygon , circle , etc. |
SDO_TOPO_ GEOMETRY |
Describe una geometría de topología. | Sí | PostGIS, una extensión de Postgres muy utilizada, proporciona varios tipos de topología. | |
SDO_GEORASTER |
Una cuadrícula ráster o un objeto de imagen se almacenan en una sola fila. | Sí | PostGIS, una extensión de Postgres muy utilizada, proporciona una herramienta para cargar archivos ráster en la base de datos. | |
Tipos de contenido multimedia | ORDDicom |
Admite el almacenamiento y la gestión de archivos Digital Imaging and Communications in Medicine (DICOM). | Sí, con una solución alternativa | Postgres proporciona un tipo binario, bytea , para almacenar objetos grandes. |
ORDDoc |
Admite el almacenamiento y la gestión de cualquier tipo de datos multimedia. | Sí, con una solución alternativa | Postgres proporciona un tipo binario, bytea , para almacenar objetos grandes. |
|
ORDImage |
Admite el almacenamiento y la gestión de datos de imagen. | Sí, con una solución alternativa | Postgres proporciona un tipo binario, bytea , para almacenar objetos grandes. |
|
ORDVideo |
Admite el almacenamiento y la gestión de datos de vídeo. | Solución | Postgres proporciona un tipo binario, bytea , para almacenar objetos grandes. |
* El tipo de datos correspondiente en Cloud SQL para PostgreSQL es compatible en su mayoría con Oracle, pero tiene un nombre diferente.
Tipos definidos por el usuario
Oracle se refiere a los tipos definidos por el usuario (UDTs) como OBJECT TYPES
, que se gestionan con PL/SQL. Los tipos definidos por el usuario permiten crear tipos de datos complejos específicos de la aplicación que se basan en la lista de tipos de datos de Oracle integrada y la amplían.
Tipos definidos por el usuario de Oracle | Descripción general o implementación de Oracle | Compatibilidad con Cloud SQL para PostgreSQL | Solución correspondiente o alternativa de Cloud SQL para PostgreSQL |
---|---|---|---|
Tipo de datos abstracto (TDA) | CREATE TYPE ADT_DEMO AS OBJECT ( |
Parcialmente con una sintaxis diferente | Los tipos compuestos de Cloud SQL para PostgreSQL se especifican mediante una lista de nombres de atributos y tipos de datos:
|
Tipo VARRAY | CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); |
No | Como solución alternativa, Cloud SQL para PostgreSQL permite definir columnas como una matriz:
|
Tipo de tabla anidada | CREATE TYPE NTT_DEMO AS OBJECT ( |
No | Como solución alternativa, usa una combinación de tipos compuestos y una definición de columna de matriz en Cloud SQL para PostgreSQL para conseguir una funcionalidad similar a la del tipo de tabla anidada de Oracle.
|
Tipo incompleto | Los tipos incompletos son tipos sin atributos ni métodos. Otros tipos pueden hacer referencia a ellos. Sin embargo, debes proporcionar la definición del tipo antes de usarlo.
|
No | N/A |
Usuarios
En esta sección se explica cómo crear usuarios y asignar permisos, así como la necesidad de convertir tablas de Oracle en tablas de Cloud SQL para PostgreSQL.
Creación de usuarios y permisos
Las cuentas de usuario de la base de datos de Oracle (los términos "usuario" y "esquema" de Oracle son idénticos) se pueden usar para autenticar y conectar con sesiones de bases de datos, mientras que el acceso de autorización se define a nivel de usuario para objetos o permisos de bases de datos específicos.
En general, hay dos tipos de usuarios de bases de datos:
- Administradores: gestionan la instancia de base de datos, los usuarios y los recursos.
- Cuentas de usuario: sirven para operaciones lógicas, como aplicaciones.
Los administradores conceden privilegios a las cuentas de usuario y de usuario de aplicación para acceder a los objetos de la base de datos. Los permisos de la base de datos de Oracle se conceden a un usuario para operaciones específicas (por ejemplo, crear una sesión o conectarse) o para objetos de base de datos específicos (por ejemplo, SELECT
en una tabla específica o EXECUTE
en un procedimiento almacenado específico).
En Oracle, existen los conceptos de usuarios y roles. Los usuarios están acostumbrados a autenticarse con la base de datos y los roles proporcionan una agrupación de permisos que se pueden conceder en su totalidad.
En Cloud SQL para PostgreSQL, los usuarios y los roles son sinónimos. Un usuario de Cloud SQL para PostgreSQL es un rol con permiso connect
. Puedes usar la instrucción CREATE USER
o CREATE ROLE
para crear un usuario de base de datos. A diferencia de Oracle, en Cloud SQL para PostgreSQL, los esquemas y los usuarios se crean por separado. Un esquema es una colección de objetos (por ejemplo, tablas, tipos de datos, funciones, etc.) que pertenece a un usuario.
Oracle Create User | |
---|---|
CREATE USER user_name IDENTIFIED BY password; |
|
Cloud SQL para PostgreSQL Create User | |
CREATE USER user WITH PASSWORD 'password';
O
|
Consideraciones sobre las conversiones
- Los usuarios se definen en el nivel raíz y son válidos para todas las bases de datos contenidas en el mismo clúster de Cloud SQL para PostgreSQL. Es similar a los "usuarios comunes" de Oracle 12c.
- La sintaxis de
CREATE USER
de Cloud SQL para PostgreSQL es diferente de la de Oracle y no se puede migrar tal cual.CREATE USER
en Cloud SQL para PostgreSQL es un alias deCREATE ROLE
, excepto que la opciónLOGIN
está habilitada de forma predeterminada.
Tablas
Las tablas de Oracle se componen de muchos elementos, como tipos de datos de columna, restricciones de tabla, índices, particiones, funciones propias de las tablas de Oracle y más. Para migrar correctamente a las tablas de la base de datos de Cloud SQL para PostgreSQL, todos los elementos de las tablas de Oracle deben convertirse en tablas de Cloud SQL para PostgreSQL. Algunos elementos se admiten sin modificaciones o con modificaciones menores, mientras que otros deben modificarse por completo.
Desde el punto de vista de la migración, convertir PL/SQL a Cloud SQL para PostgreSQL probablemente requiera más esfuerzo, ya que convertir tablas de Oracle a tablas de Cloud SQL para PostgreSQL es una fase crucial con una importancia significativa y más implicaciones en el rendimiento y el tamaño de los datos.
A continuación, se indican las principales diferencias entre las tablas de Oracle y Cloud SQL para PostgreSQL, así como las funciones relacionadas. Estas diferencias se analizan en el resto de la serie.
- Sintaxis para crear tablas
- Metadatos de tablas e índices
- Compatibilidad con restricciones
- Tipos de datos admitidos y limitaciones
- Índices
- Particiones y gestión de particiones
- Mantenimiento de tablas e índices
- Tablas temporales
- Vistas
- Columnas visibles e invisibles (Oracle 12c)
- Conjuntos de caracteres de tablas y columnas
Siguientes pasos
- Consulta más información sobre las cuentas de usuario de Cloud SQL para PostgreSQL.
- Consulta arquitecturas de referencia, diagramas y prácticas recomendadas sobre Google Cloud. Consulta nuestro Centro de arquitectura de Cloud.