Migración del servidor a Postgre con SQL SQL AWS Schema Conversion Tool - AWS Schema Conversion Tool

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migración del servidor a Postgre con SQL SQL AWS Schema Conversion Tool

Puede utilizar el paquete de SQL extensiones SQL Server to Postgre en. AWS SCT Este paquete de extensión emula las funciones de la base de datos SQL del servidor en el código Postgre convertido. SQL Utilice el paquete de SQL extensión SQL Server to Postgre para emular Server Agent y SQL Server Database Mail. SQL Para obtener más información acerca de los paquetes de extensión , consulte Uso de paquetes de extensión con AWS Schema Conversion Tool.

Privilegios para SQL Postgre como base de datos de destino

Para usar Postgre SQL como destino, AWS SCT se requiere el privilegio. CREATE ON DATABASE Asegúrese de conceder este privilegio a cada base de datos SQL Postgre de destino.

Para usar los sinónimos públicos convertidos, cambie la ruta de búsqueda predeterminada de la base de datos a "$user", public_synonyms, public.

Puede usar el siguiente ejemplo de código para crear un usuario de base de datos y conceder los privilegios.

CREATE ROLE user_name LOGIN PASSWORD 'your_password'; GRANT CREATE ON DATABASE db_name TO user_name; ALTER DATABASE db_name SET SEARCH_PATH = "$user", public_synonyms, public;

En el ejemplo anterior, sustituya user_name por el nombre de su usuario. A continuación, sustituya db_name con el nombre de la base de datos de destino. Por último, sustituya your_password con una contraseña segura.

En PostgreSQL, solo el propietario del esquema o a superuser puede eliminar un esquema. El propietario puede eliminar un esquema y todos los objetos que incluye este esquema, aunque el propietario del esquema no sea propietario de algunos de los objetos.

Cuando utilizas diferentes usuarios para convertir y aplicar diferentes esquemas a tu base de datos de destino, puedes recibir un mensaje de error cuando no AWS SCT puedes eliminar un esquema. Para evitar este mensaje de error, utilice el rol de superuser.

SQLConfiguración de conversión de servidor a Postgre SQL

Para editar la configuración de SQL conversión de SQL servidor a Postgre, seleccione Configuración y, a continuación, elija Configuración de conversión. En la lista superior, selecciona SQLServidor y, a continuación, selecciona SQLServidor — Postgre. SQL AWS SCT muestra todos los ajustes disponibles para la conversión de SQL servidor a SQL Postgre.

SQLLa configuración de SQL conversión de servidor a Postgre AWS SCT incluye opciones para lo siguiente:

  • Limitar el número de comentarios con elementos de acción en el código convertido.

    En Añadir comentarios en el código convertido para los elementos de acción de la gravedad seleccionada o superior, selecciona la gravedad de los elementos de acción. AWS SCT añade comentarios en el código convertido para los elementos de acción de la gravedad seleccionada o superior.

    Por ejemplo, para minimizar el número de comentarios en el código convertido, seleccione Solo errores. Para incluir comentarios para todos los elementos de acción del código convertido, seleccione Todos los mensajes.

  • Para permitir el uso de índices con el mismo nombre en diferentes tablas SQL del servidor.

    En PostgreSQL, todos los nombres de índice que utilice en el esquema deben ser únicos. Para asegurarse de que AWS SCT genera nombres únicos para todos sus índices, seleccione Generar nombres únicos para los índices.

  • Para convertir los procedimientos SQL del servidor en funciones de PostgreSQL.

    La SQL versión 10 y anteriores de Postgre no admiten procedimientos. Para los clientes que no estén familiarizados con el uso de los procedimientos en PostgreSQL, AWS SCT pueden convertir los procedimientos en funciones. Para ello, seleccione Convertir procedimientos en funciones.

  • Simular la salida de EXEC en una tabla.

    La base de datos SQL del servidor de origen puede almacenar la salida de EXEC en una tabla. AWS SCT crea tablas temporales y un procedimiento adicional para emular esta función. Para usar esta simulación, seleccione Crear rutinas adicionales para gestionar conjuntos de datos abiertos.

  • Definir la plantilla que se utilizará para los nombres de los esquemas del código convertido. En Plantilla de generación de nombres de esquema, elija una de las siguientes opciones:

    • <source_db>— Utiliza el nombre de la base de datos del SQL servidor como nombre de esquema en SQL Postgre.

    • <source_schema>— Utiliza el nombre SQL del esquema del servidor como nombre de esquema en Postgre. SQL

    • _ <source_db><schema>— Utiliza una combinación de los nombres de la base de datos y del esquema SQL del servidor como nombre de esquema en Postgre. SQL

  • Mantener las mayúsculas y minúsculas de los nombres de los objetos de origen.

    Para evitar la conversión de los nombres de los objetos a minúsculas, seleccione Evitar la conversión a minúsculas para las operaciones que distingan mayúsculas y minúsculas. Esta opción solo se aplica cuando se activa la opción de distinguir entre mayúsculas y minúsculas en la base de datos de destino.

  • Conservar los nombres de los parámetros de la base de datos de origen.

    Para agregar comillas dobles a los nombres de los parámetros del código convertido, seleccione Conservar los nombres de los parámetros originales.

Conversión de particiones SQL del servidor a particiones de la versión 10 de Postgre SQL

Al convertir una base de datos de Microsoft SQL Server a Amazon Aurora Postgre SQL -Compatible Edition (Aurora PostgreSQL) o Amazon Relational Database Service for Postgre SQL (RDSAmazon for SQL Postgre), tenga en cuenta lo siguiente.

En Server, se crean particiones con funciones de partición. SQL Al convertir una tabla particionada de SQL servidor a una tabla particionada de la SQL versión 10 de Postgre, tenga en cuenta varios posibles problemas:

  • SQLEl servidor le permite particionar una tabla mediante una columna sin restricciones. NOT NULL En ese caso, todos los NULL valores van a la partición situada más a la izquierda. Postgre SQL no admite NULL valores para la creación de particiones. RANGE

  • SQLEl servidor te permite crear claves principales y únicas para tablas particionadas. En el caso de PostgreSQL, se crean claves principales o únicas para cada partición directamente. Por lo tanto, PRIMARY UNIQUE KEY nuestra restricción debe eliminarse de su tabla principal al migrar a Postgre. SQL Los nombres de clave resultantes tienen el formato <original_key_name>_<partition_number>.

  • SQLEl servidor le permite crear restricciones de clave externa desde y hacia tablas particionadas. Postgre SQL no admite claves foráneas que hagan referencia a tablas particionadas. Además, Postgre SQL no admite referencias de claves externas de una tabla particionada a otra tabla.

  • SQLEl servidor te permite crear índices para tablas particionadas. En el caso de PostgreSQL, se debe crear un índice directamente para cada partición. Por lo tanto, los índices deben eliminarse de sus tablas principales al migrar a Postgre. SQL Los nombres de índice resultantes tienen el formato <original_index_name>_<partition_number>.

  • Postgre SQL no admite índices particionados.

Consideraciones sobre la migración

Algunos aspectos a tener en cuenta al migrar un esquema de SQL servidor a Postgre: SQL

  • En PostgreSQL, todos los nombres de los objetos de un esquema deben ser únicos, incluidos los índices. Los nombres de los índices deben ser únicos en el esquema de la tabla base. En SQL Server, el nombre de un índice puede ser el mismo para diferentes tablas.

    Para garantizar la exclusividad de los nombres de índice, AWS SCT ofrece la opción de generar nombres de índice únicos si los nombres de índice no son únicos. Para ello, seleccione la opción Generate unique index names (Generar nombres de índice únicos) en las propiedades del proyecto. Esta opción está habilitada de forma predeterminada. Si esta opción está habilitada, se crean nombres de índice único con el formato IX_nombre_tabla_nombre_índice. Si esta opción está deshabilitada, los nombres de índice no se modifican.

  • Se pueden usar una GOTO sentencia y una etiqueta para cambiar el orden en que se ejecutan las sentencias. SQLLas declaraciones de Transact que siguen a una GOTO declaración se omiten y el procesamiento continúa en la etiqueta. GOTOlas declaraciones y las etiquetas se pueden usar en cualquier parte de un procedimiento, lote o bloque de declaraciones. GOTOlas declaraciones también se pueden anidar.

    Postgre SQL no usa declaraciones. GOTO Cuando AWS SCT convierte el código que contiene una GOTO declaración, convierte la declaración para usar una declaraciónBEGIN... END oLOOP... END LOOP Puede encontrar ejemplos de cómo se AWS SCT convierten GOTO las sentencias en la siguiente tabla.

    SQLGOTOLas sentencias de servidor y las sentencias de Postgre SQL convertidas
    SQLDeclaración del servidor Declaración de Postgre SQL
    BEGIN .... statement1; .... GOTO label1; statement2; .... label1: Statement3; .... END
    BEGIN label1: BEGIN .... statement1; .... EXIT label1; statement2; .... END; Statement3; .... END
    BEGIN .... statement1; .... label1: statement2; .... GOTO label1; statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: LOOP statement2; .... CONTINUE label1; EXIT label1; END LOOP; statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: statement2; .... statement3; .... statement4; .... END
    BEGIN .... statement1; .... label1: BEGIN statement2; .... statement3; .... statement4; .... END; END
  • Postgre SQL no apoya una declaración. MERGE AWS SCT emula el comportamiento de una MERGE declaración de las siguientes maneras:

    • De INSERT ON CONFLICT construction.

    • Mediante el uso de la UPDATE FROM DML declaración, por ejemplo, MERGE sin una WHEN NOT MATCHED cláusula.

    • Mediante el usoCURSOR, por ejemplo, MERGE con una DELETE cláusula with o mediante una sentencia de condición MERGE ON compleja.

  • AWS SCT puede añadir activadores de bases de datos al árbol de objetos cuando Amazon RDS es el objetivo.

  • AWS SCT puede añadir activadores a nivel de servidor al árbol de objetos cuando Amazon RDS es el objetivo.

  • SQLEl servidor crea deleted y inserted administra tablas automáticamente. Puede utilizar estas tablas temporales que residen en la memoria para probar los efectos de determinadas modificaciones en los datos y establecer las condiciones para las acciones que DML desencadenan las acciones. AWS SCT puede convertir el uso de estas tablas en sentencias de DML activación.

  • AWS SCT puede añadir servidores enlazados al árbol de objetos cuando Amazon RDS es el objetivo.

  • Al migrar de Microsoft SQL Server a PostgreSQL, la SNAME función SUSER _ integrada se convierte de la siguiente manera:

    • SUSER_ SNAME — Devuelve el nombre de inicio de sesión asociado a un número de identificación de seguridad (). SID

    • SUSER_ SNAME (<server_user_sid>): no se admite.

    • SUSER_ SNAME () CURRENT _ USER — Devuelve el nombre de usuario del contexto de ejecución actual.

    • SUSER_ SNAME (NULL) — DevuelveNULL.

  • Se permite la conversión de funciones con valores de tabla. Las funciones con valores de tabla devuelven una tabla y pueden tomar el lugar de una tabla en una consulta.

  • PATINDEXdevuelve la posición inicial de la primera aparición de un patrón en una expresión especificada en todos los tipos de datos de texto y caracteres válidos. Devuelve ceros si no se encuentra el patrón. <pattern character><expression character varying>Al convertir de SQL Server a Amazon RDS para PostgreSQL, AWS SCT reemplaza el código de la aplicación que se usa por PATINDEX aws_sqlserver_ext.patindex (,).

  • En SQL Server, un tipo de tabla definido por el usuario es un tipo que representa la definición de una estructura de tabla. Se utiliza un tipo de tabla definido por el usuario para declarar parámetros de valor de tabla para procedimientos o funciones almacenados. También puede utilizar un tipo de tabla definido por el usuario para declarar las variables de tabla que desee utilizar en un lote o en el cuerpo de un procedimiento o función almacenados. AWS SCT emuló este tipo en Postgre SQL creando una tabla temporal.

Al convertir de SQL servidor a PostgreSQL, AWS SCT convierte los objetos del sistema SQL del servidor en objetos reconocibles en Postgre. SQL En la siguiente tabla se muestra cómo se convierten los objetos del sistema.

Casos de uso de MS Server SQL Sustitución de Postgre SQL

SYS.SCHEMAS

AWS_SQLSERVER_EXT.SYS_SCHEMAS

SYS.TABLES

AWS_SQLSERVER_EXT.SYS_TABLES

SYS.VIEWS

AWS_SQLSERVER_EXT.SYS_VIEWS

SYS.ALL_VIEWS

AWS_SQLSERVER_EXT.SYS_ALL_VIEWS

SYS.TYPES

AWS_SQLSERVER_EXT.SYS_TYPES

SYS.COLUMNS

AWS_SQLSERVER_EXT.SYS_COLUMNS

SYS.ALL_COLUMNS

AWS_SQLSERVER_EXT.SYS_ALL_COLUMNS

SYS.FOREIGN_KEYS

AWS_SQLSERVER_EXT.SYS_FOREIGN_KEYS

SYS.SYSFOREIGNKEYS

AWS_SQLSERVER_EXT.SYS_SYSFOREIGNKEYS

SYS.FOREIGN_KEY_COLUMNS

AWS_SQLSERVER_EXT.SYS_FOREIGN_KEY_COLUMNS

SYS.KEY_CONSTRAINTS

AWS_SQLSERVER_EXT.SYS_KEY_CONSTRAINTS

SYS.IDENTITY_COLUMNS

AWS_SQLSERVER_EXT.SYS_IDENTITY_COLUMNS

SYS.PROCEDURES

AWS_SQLSERVER_EXT.SYS_PROCEDURES

SYS.INDEXES

AWS_SQLSERVER_EXT.SYS_INDEXES

SYS.SYSINDEXES

AWS_SQLSERVER_EXT.SYS_SYSINDEXES

SYS.OBJECTS

AWS_SQLSERVER_EXT.SYS_OBJECTS

SYS.ALL_OBJECTS

AWS_SQLSERVER_EXT.SYS_ALL_OBJECTS

SYS.SYSOBJECTS

AWS_SQLSERVER_EXT.SYS_SYSOBJECTS

SYS.SQL_MODULES

AWS_SQLSERVER_EXT.SYS_SQL_MODULES

SYS.DATABASES

AWS_SQLSERVER_EXT.SYS_DATABASES

INFORMATION_SCHEMA.SCHEMATA

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_SCHEMATA

INFORMATION_SCHEMA.VIEWS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_VIEWS

INFORMATION_SCHEMA.TABLES

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLES

INFORMATION_SCHEMA.COLUMNS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_COLUMNS

INFORMATION_SCHEMA.CHECK_CONSTRAINTS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CHECK_CONSTRAINTS

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_REFERENTIAL_CONSTRAINTS

INFORMATION_SCHEMA.TABLE_CONSTRAINTS

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_TABLE_CONSTRAINTS

INFORMATION_SCHEMA.KEY_COLUMN_USAGE

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_KEY_COLUMN_USAGE

INFORMATION_SCHEMA.CONSTRAINT_TABLE_USAGE

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_TABLE_USAGE

INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_CONSTRAINT_COLUMN_USAGE

INFORMATION_SCHEMA.ROUTINES

AWS_SQLSERVER_EXT.INFORMATION_SCHEMA_ROUTINES

SYS.SYSPROCESSES

AWS_SQLSERVER_EXT.SYS_SYSPROCESSES

sys.system_objects

AWS_SQLSERVER_EXT.SYS_SYSTEM_OBJECTS