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.
Temas
- Privilegios para SQL Postgre como base de datos de destino
- SQLConfiguración de conversión de servidor a Postgre SQL
- Conversión de particiones SQL del servidor a particiones de la versión 10 de Postgre SQL
- Consideraciones sobre la migración
- Uso de un paquete de AWS SCT extensión para emular el agente de SQL servidor en Postgre SQL
- Uso de un paquete AWS SCT de extensión para emular el correo de la base de datos SQL del servidor en Postgre SQL
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 DATABASEdb_name
TOuser_name
; ALTER DATABASEdb_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 convertidasSQLDeclaració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
yinserted
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 |