Seleccione sus preferencias de cookies

Usamos cookies esenciales y herramientas similares que son necesarias para proporcionar nuestro sitio y nuestros servicios. Usamos cookies de rendimiento para recopilar estadísticas anónimas para que podamos entender cómo los clientes usan nuestro sitio y hacer mejoras. Las cookies esenciales no se pueden desactivar, pero puede hacer clic en “Personalizar” o “Rechazar” para rechazar las cookies de rendimiento.

Si está de acuerdo, AWS y los terceros aprobados también utilizarán cookies para proporcionar características útiles del sitio, recordar sus preferencias y mostrar contenido relevante, incluida publicidad relevante. Para aceptar o rechazar todas las cookies no esenciales, haga clic en “Aceptar” o “Rechazar”. Para elegir opciones más detalladas, haga clic en “Personalizar”.

Migración de aplicaciones heredadas de Oracle Pro*C a ECPG - Recomendaciones de AWS

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.

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 de aplicaciones heredadas de Oracle Pro*C a ECPG

Creado por Sai Parthasaradhi (AWS) y Mahesh Balumuri (AWS)

Resumen

La mayoría de las aplicaciones antiguas que tienen código SQL integrado utilizan el precompilador Pro*C de Oracle para acceder a la base de datos. Al migrar estas bases de datos de Oracle a Amazon Relational Database Service (Amazon RDS) para PostgreSQL o a una edición compatible con Amazon Aurora PostgreSQL, debe convertir el código de la aplicación a un formato que sea compatible con el precompilador de PostgreSQL, que se denomina ECPG. Este patrón describe cómo convertir el código de Oracle Pro*C a su equivalente en PostgreSQL ECPG. 

Para obtener más información sobre Pro*C, consulte la documentación de Oracle. Para obtener una breve introducción al ECPG, consulte la sección Información adicional.

Requisitos previos y limitaciones

Requisitos previos 

  • Una cuenta de AWS activa

  • Una base de datos compatible con Amazon RDS para PostgreSQL o Aurora PostgreSQL

  • Una base de datos de Oracle que se ejecuta en las instalaciones

Herramientas

  • Los paquetes de PostgreSQL que se enumeran en la siguiente sección.

  • AWS CLI: la interfaz de la línea de comandos de AWS (AWS CLI) es una herramienta de código abierto para interactuar con los servicios de AWS mediante comandos en el intérprete de comandos de línea de comandos. Con una configuración mínima, puede ejecutar comandos de la CLI de AWS que implementan una funcionalidad equivalente a la proporcionada por la consola de administración de AWS basada en navegador desde un símbolo del sistema.

Epics

TareaDescripciónHabilidades requeridas
Instale los paquetes de PostgreSQL.

Instale los paquetes PostgreSQL necesarios utilizando los siguientes comandos.

yum update -y yum install -y yum-utils rpm -ivh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm dnf -qy module disable postgresql
Desarrollador de aplicaciones, DevOps ingeniero
Instale los archivos de encabezado y las bibliotecas.

Instale el paquete postgresql12-devel, que contiene bibliotecas y archivos de encabezado, mediante los siguientes comandos. Instale el paquete tanto en el entorno de desarrollo como en el de tiempo de ejecución para evitar errores en el entorno de ejecución.

dnf -y install postgresql12-devel yum install ncompress zip ghostscript jq unzip wget git -y

Solo para el entorno de desarrollo, ejecute también los siguientes comandos.

yum install zlib-devel make -y ln -s /usr/pgsql-12/bin/ecpg /usr/bin/
Desarrollador de aplicaciones, DevOps ingeniero
Configure la variable de ruta del entorno.

Establezca la ruta del entorno para las bibliotecas cliente de PostgreSQL.

export PATH=$PATH:/usr/pgsql-12/bin
Desarrollador de aplicaciones, DevOps ingeniero
Instale software adicional según sea necesario.

Si es necesario, instale PGLoader como reemplazo de SQL*Loader en Oracle.

wget -O /etc/yum.repos.d/pgloader-ccl.repo https://dl.packager.io/srv/opf/pgloader-ccl/master/installer/el/7.repo yum install pgloader-ccl -y ln -s /opt/pgloader-ccl/bin/pgloader /usr/bin/

Si llama a alguna aplicación Java desde un módulo Pro*C, instale Java.

yum install java -y

Instale ant para compilar el código Java.

yum install ant -y
Desarrollador de aplicaciones, DevOps ingeniero
Instale la AWS CLI.

Instale la CLI de AWS para ejecutar comandos que interactúen con servicios de AWS de como AWS Secrets Manager y Amazon Simple Storage Service (Amazon S3) desde sus aplicaciones.

cd /tmp/ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip ./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update
Desarrollador de aplicaciones, DevOps ingeniero
Identifique los programas que se convertirán.

Identifique las aplicaciones que desea convertir de Pro*C a ECPG.

Desarrollador de aplicaciones, propietario de la aplicación

Configurar el entorno de compilación en CentOS o RHEL

TareaDescripciónHabilidades requeridas
Instale los paquetes de PostgreSQL.

Instale los paquetes PostgreSQL necesarios utilizando los siguientes comandos.

yum update -y yum install -y yum-utils rpm -ivh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm dnf -qy module disable postgresql
Desarrollador de aplicaciones, DevOps ingeniero
Instale los archivos de encabezado y las bibliotecas.

Instale el paquete postgresql12-devel, que contiene bibliotecas y archivos de encabezado, mediante los siguientes comandos. Instale el paquete tanto en el entorno de desarrollo como en el de tiempo de ejecución para evitar errores en el entorno de ejecución.

dnf -y install postgresql12-devel yum install ncompress zip ghostscript jq unzip wget git -y

Solo para el entorno de desarrollo, ejecute también los siguientes comandos.

yum install zlib-devel make -y ln -s /usr/pgsql-12/bin/ecpg /usr/bin/
Desarrollador de aplicaciones, DevOps ingeniero
Configure la variable de ruta del entorno.

Establezca la ruta del entorno para las bibliotecas cliente de PostgreSQL.

export PATH=$PATH:/usr/pgsql-12/bin
Desarrollador de aplicaciones, DevOps ingeniero
Instale software adicional según sea necesario.

Si es necesario, instale PGLoader como reemplazo de SQL*Loader en Oracle.

wget -O /etc/yum.repos.d/pgloader-ccl.repo https://dl.packager.io/srv/opf/pgloader-ccl/master/installer/el/7.repo yum install pgloader-ccl -y ln -s /opt/pgloader-ccl/bin/pgloader /usr/bin/

Si llama a alguna aplicación Java desde un módulo Pro*C, instale Java.

yum install java -y

Instale ant para compilar el código Java.

yum install ant -y
Desarrollador de aplicaciones, DevOps ingeniero
Instale la AWS CLI.

Instale la CLI de AWS para ejecutar comandos que interactúen con servicios de AWS de como AWS Secrets Manager y Amazon Simple Storage Service (Amazon S3) desde sus aplicaciones.

cd /tmp/ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip ./aws/install -i /usr/local/aws-cli -b /usr/local/bin --update
Desarrollador de aplicaciones, DevOps ingeniero
Identifique los programas que se convertirán.

Identifique las aplicaciones que desea convertir de Pro*C a ECPG.

Desarrollador de aplicaciones, propietario de la aplicación
TareaDescripciónHabilidades requeridas
Elimine los encabezados no deseados.

Elimine los encabezados include que no sean necesarios en PostgreSQL, como oci.h, oratypes y sqlda.

Propietario de la aplicación, desarrollador de la aplicación
Actualice las declaraciones de variables.

Agregue instrucciones EXEC SQL para todas las declaraciones de variables que se utilizan como variables de host.

Elimine de la aplicación las declaraciones EXEC SQL VAR como las siguientes.

EXEC SQL VAR query IS STRING(2048);
Desarrollador de aplicaciones, propietario de la aplicación
Actualice la funcionalidad ROWNUM.

La función ROWNUM no está disponible en PostgreSQL. Sustituya esto con la función de ventana ROW_NUMBER en las consultas SQL.

Código Pro*C:

SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq   FROM   (SELECT FILE_NAME FROM  DEMO_FILES_TABLE WHERE FILE_NAME    LIKE '%POC%' ORDER BY FILE_NAME DESC) FL2 WHERE ROWNUM <=1 ORDER BY ROWNUM;

Código ECPG:

SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq   FROM   (SELECT FILE_NAME , ROW_NUMBER() OVER (ORDER BY FILE_NAME DESC) AS ROWNUM FROM  demo_schema.DEMO_FILES_TABLE WHERE FILE_NAME    LIKE '%POC%' ORDER BY FILE_NAME DESC) FL2 WHERE ROWNUM <=1 ORDER BY ROWNUM;
Desarrollador de aplicaciones, propietario de la aplicación
Actualice los parámetros de la función para usar variables de alias.

En PostgreSQL, los parámetros de las funciones no se pueden usar como variables de host. Sobrescríbalos mediante una variable de alias.

Código Pro*C:

int processData(int referenceId){   EXEC SQL char col_val[100];   EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId; }

Código ECPG:

int processData(int referenceIdParam){   EXEC SQL int referenceId = referenceIdParam;   EXEC SQL char col_val[100];   EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId; }
Desarrollador de aplicaciones, propietario de la aplicación
Actualice los tipos de estructura.

Defina los tipos de struct en los boques EXEC SQL BEGIN y END con typedef si las variables de tipo struct se utilizan como variables de host. Si los tipos de struct están definidos en los archivos de encabezado (.h), incluya los archivos con instrucciones EXEC SQL include.

Código Pro*C:

Archivo de encabezado (demo.h)

struct s_partition_ranges {  char   sc_table_group[31];  char   sc_table_name[31];  char   sc_range_value[10]; }; struct s_partition_ranges_ind {   short    ss_table_group;   short    ss_table_name;   short    ss_range_value; };

Código ECPG:

Archivo de encabezado (demo.h)

EXEC SQL BEGIN DECLARE SECTION; typedef struct {   char   sc_table_group[31];   char   sc_table_name[31];   char   sc_range_value[10]; } s_partition_ranges; typedef struct {   short    ss_table_group;   short    ss_table_name;   short    ss_range_value; } s_partition_ranges_ind; EXEC SQL END DECLARE SECTION;

Archivo Pro*C (demo.pc)

#include "demo.h" struct s_partition_ranges gc_partition_data[MAX_PART_TABLE] ; struct s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ;

Archivo ECPG (demo.pc)

exec sql include "demo.h" EXEC SQL BEGIN DECLARE SECTION; s_partition_ranges gc_partition_data[MAX_PART_TABLE] ; s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ; EXEC SQL END DECLARE SECTION;
Desarrollador de aplicaciones, propietario de la aplicación
Modifique la lógica para extraerla de los cursores.

Para obtener varias filas de los cursores mediante variables de matriz, cambie el código que se va a utilizar FETCH FORWARD.

Código Pro*C:

EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH]; EXEC SQL FETCH filename_cursor into :aPoeFiles;

Código ECPG:

EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH]; EXEC SQL int fetchSize = MAX_FILES; EXEC SQL FETCH FORWARD :fetchSize filename_cursor into :aPoeFiles;
Desarrollador de aplicaciones, propietario de la aplicación
Modifique las llamadas a paquetes que no tienen valores de retorno.

Las funciones de los paquetes de Oracle que no tienen valores de retorno se deben llamar con una variable indicadora. Si la aplicación incluye varias funciones que tienen el mismo nombre o si las funciones de tipo desconocido generan errores de tiempo de ejecución, clasifique los valores en los tipos de datos.

Código Pro*C:

void ProcessData (char *data , int id) {                EXEC SQL EXECUTE                BEGIN                   pkg_demo.process_data (:data, :id);                                                                                                  END;        END-EXEC; }

Código ECPG:

void ProcessData (char *dataParam, int idParam ) {         EXEC SQL char *data = dataParam;         EXEC SQL int id = idParam;         EXEC SQL short rowInd;         EXEC SQL short rowInd = 0;         EXEC SQL SELECT pkg_demo.process_data (                        inp_data => :data::text,                        inp_id => :id                ) INTO :rowInd; }
Desarrollador de aplicaciones, propietario de la aplicación
Reescriba las variables SQL_CURSOR.

Reescriba la variable SQL_CURSOR y su implementación.

Código Pro*C:

/* SQL Cursor */ SQL_CURSOR      demo_cursor; EXEC SQL ALLOCATE :demo_cursor; EXEC SQL EXECUTE   BEGIN       pkg_demo.get_cursor(             demo_cur=>:demo_cursor       );   END; END-EXEC;

Código ECPG:

EXEC SQL DECLARE demo_cursor CURSOR FOR SELECT          * from     pkg_demo.open_filename_rc(             demo_cur=>refcursor           ) ; EXEC SQL char open_filename_rcInd[100]; # As the below function returns cursor_name as # return we need to use char[] type as indicator. EXEC SQL SELECT pkg_demo.get_cursor (         demo_cur=>'demo_cursor'     ) INTO :open_filename_rcInd;
Desarrollador de aplicaciones, propietario de la aplicación
Aplique patrones de migración comunes.
  • Cambie las consultas SQL para que sean compatibles con PostgreSQL.

  • Mueva los bloques anónimos a la base de datos cuando no estén admitidos en ECPG.

  • Elimine la lógica dbms_application_info, que no admite PostgreSQL.

  • Mueva las instrucciones EXEC SQL COMMIT después de cerrar el cursor. Si realiza consultas mientras está en el bucle para recuperar los registros del cursor, el cursor se cierra y se muestra un error que indica que el cursor no existe.

  • Para obtener información sobre la gestión de excepciones en ECPG y códigos de error, consulte Gestión de errores en la documentación de PostgreSQL.

Desarrollador de aplicaciones, propietario de la aplicación
Habilite la depuración, si fuera necesario.

Para ejecutar el programa ECPG en modo de depuración, añada el siguiente comando dentro del bloque de funciones principal.

ECPGdebug(1, stderr);
Desarrollador de aplicaciones, propietario de la aplicación

Convertir el código Pro*C a ECPG

TareaDescripciónHabilidades requeridas
Elimine los encabezados no deseados.

Elimine los encabezados include que no sean necesarios en PostgreSQL, como oci.h, oratypes y sqlda.

Propietario de la aplicación, desarrollador de la aplicación
Actualice las declaraciones de variables.

Agregue instrucciones EXEC SQL para todas las declaraciones de variables que se utilizan como variables de host.

Elimine de la aplicación las declaraciones EXEC SQL VAR como las siguientes.

EXEC SQL VAR query IS STRING(2048);
Desarrollador de aplicaciones, propietario de la aplicación
Actualice la funcionalidad ROWNUM.

La función ROWNUM no está disponible en PostgreSQL. Sustituya esto con la función de ventana ROW_NUMBER en las consultas SQL.

Código Pro*C:

SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq   FROM   (SELECT FILE_NAME FROM  DEMO_FILES_TABLE WHERE FILE_NAME    LIKE '%POC%' ORDER BY FILE_NAME DESC) FL2 WHERE ROWNUM <=1 ORDER BY ROWNUM;

Código ECPG:

SELECT SUBSTR(RTRIM(FILE_NAME,'.txt'),12) INTO :gcpclFileseq   FROM   (SELECT FILE_NAME , ROW_NUMBER() OVER (ORDER BY FILE_NAME DESC) AS ROWNUM FROM  demo_schema.DEMO_FILES_TABLE WHERE FILE_NAME    LIKE '%POC%' ORDER BY FILE_NAME DESC) FL2 WHERE ROWNUM <=1 ORDER BY ROWNUM;
Desarrollador de aplicaciones, propietario de la aplicación
Actualice los parámetros de la función para usar variables de alias.

En PostgreSQL, los parámetros de las funciones no se pueden usar como variables de host. Sobrescríbalos mediante una variable de alias.

Código Pro*C:

int processData(int referenceId){   EXEC SQL char col_val[100];   EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId; }

Código ECPG:

int processData(int referenceIdParam){   EXEC SQL int referenceId = referenceIdParam;   EXEC SQL char col_val[100];   EXEC SQL select column_name INTO :col_val from table_name where col=:referenceId; }
Desarrollador de aplicaciones, propietario de la aplicación
Actualice los tipos de estructura.

Defina los tipos de struct en los boques EXEC SQL BEGIN y END con typedef si las variables de tipo struct se utilizan como variables de host. Si los tipos de struct están definidos en los archivos de encabezado (.h), incluya los archivos con instrucciones EXEC SQL include.

Código Pro*C:

Archivo de encabezado (demo.h)

struct s_partition_ranges {  char   sc_table_group[31];  char   sc_table_name[31];  char   sc_range_value[10]; }; struct s_partition_ranges_ind {   short    ss_table_group;   short    ss_table_name;   short    ss_range_value; };

Código ECPG:

Archivo de encabezado (demo.h)

EXEC SQL BEGIN DECLARE SECTION; typedef struct {   char   sc_table_group[31];   char   sc_table_name[31];   char   sc_range_value[10]; } s_partition_ranges; typedef struct {   short    ss_table_group;   short    ss_table_name;   short    ss_range_value; } s_partition_ranges_ind; EXEC SQL END DECLARE SECTION;

Archivo Pro*C (demo.pc)

#include "demo.h" struct s_partition_ranges gc_partition_data[MAX_PART_TABLE] ; struct s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ;

Archivo ECPG (demo.pc)

exec sql include "demo.h" EXEC SQL BEGIN DECLARE SECTION; s_partition_ranges gc_partition_data[MAX_PART_TABLE] ; s_partition_ranges_ind gc_partition_data_ind[MAX_PART_TABLE] ; EXEC SQL END DECLARE SECTION;
Desarrollador de aplicaciones, propietario de la aplicación
Modifique la lógica para extraerla de los cursores.

Para obtener varias filas de los cursores mediante variables de matriz, cambie el código que se va a utilizar FETCH FORWARD.

Código Pro*C:

EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH]; EXEC SQL FETCH filename_cursor into :aPoeFiles;

Código ECPG:

EXEC SQL char  aPoeFiles[MAX_FILES][FILENAME_LENGTH]; EXEC SQL int fetchSize = MAX_FILES; EXEC SQL FETCH FORWARD :fetchSize filename_cursor into :aPoeFiles;
Desarrollador de aplicaciones, propietario de la aplicación
Modifique las llamadas a paquetes que no tienen valores de retorno.

Las funciones de los paquetes de Oracle que no tienen valores de retorno se deben llamar con una variable indicadora. Si la aplicación incluye varias funciones que tienen el mismo nombre o si las funciones de tipo desconocido generan errores de tiempo de ejecución, clasifique los valores en los tipos de datos.

Código Pro*C:

void ProcessData (char *data , int id) {                EXEC SQL EXECUTE                BEGIN                   pkg_demo.process_data (:data, :id);                                                                                                  END;        END-EXEC; }

Código ECPG:

void ProcessData (char *dataParam, int idParam ) {         EXEC SQL char *data = dataParam;         EXEC SQL int id = idParam;         EXEC SQL short rowInd;         EXEC SQL short rowInd = 0;         EXEC SQL SELECT pkg_demo.process_data (                        inp_data => :data::text,                        inp_id => :id                ) INTO :rowInd; }
Desarrollador de aplicaciones, propietario de la aplicación
Reescriba las variables SQL_CURSOR.

Reescriba la variable SQL_CURSOR y su implementación.

Código Pro*C:

/* SQL Cursor */ SQL_CURSOR      demo_cursor; EXEC SQL ALLOCATE :demo_cursor; EXEC SQL EXECUTE   BEGIN       pkg_demo.get_cursor(             demo_cur=>:demo_cursor       );   END; END-EXEC;

Código ECPG:

EXEC SQL DECLARE demo_cursor CURSOR FOR SELECT          * from     pkg_demo.open_filename_rc(             demo_cur=>refcursor           ) ; EXEC SQL char open_filename_rcInd[100]; # As the below function returns cursor_name as # return we need to use char[] type as indicator. EXEC SQL SELECT pkg_demo.get_cursor (         demo_cur=>'demo_cursor'     ) INTO :open_filename_rcInd;
Desarrollador de aplicaciones, propietario de la aplicación
Aplique patrones de migración comunes.
  • Cambie las consultas SQL para que sean compatibles con PostgreSQL.

  • Mueva los bloques anónimos a la base de datos cuando no estén admitidos en ECPG.

  • Elimine la lógica dbms_application_info, que no admite PostgreSQL.

  • Mueva las instrucciones EXEC SQL COMMIT después de cerrar el cursor. Si realiza consultas mientras está en el bucle para recuperar los registros del cursor, el cursor se cierra y se muestra un error que indica que el cursor no existe.

  • Para obtener información sobre la gestión de excepciones en ECPG y códigos de error, consulte Gestión de errores en la documentación de PostgreSQL.

Desarrollador de aplicaciones, propietario de la aplicación
Habilite la depuración, si fuera necesario.

Para ejecutar el programa ECPG en modo de depuración, añada el siguiente comando dentro del bloque de funciones principal.

ECPGdebug(1, stderr);
Desarrollador de aplicaciones, propietario de la aplicación
TareaDescripciónHabilidades requeridas
Cree un archivo ejecutable para ECPG.

Si tiene un archivo fuente de SQL C incrustado denominado prog1.pgc, puede crear un programa ejecutable mediante el siguiente Script.

ecpg prog1.pgc cc -I/usr/local/pgsql/include -c prog1.c cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg
Desarrollador de aplicaciones, propietario de la aplicación
Cree un archivo de creación para su compilación.

Cree un archivo make para compilar el programa ECPG, tal como se muestra en el siguiente archivo de ejemplo.

CFLAGS ::= $(CFLAGS) -I/usr/pgsql-12/include -g -Wall LDFLAGS ::= $(LDFLAGS) -L/usr/pgsql-12/lib -Wl,-rpath,/usr/pgsql-12/lib LDLIBS ::= $(LDLIBS) -lecpg PROGRAMS = test  .PHONY: all clean %.c: %.pgc   ecpg $< all: $(PROGRAMS) clean:     rm -f $(PROGRAMS) $(PROGRAMS:%=%.c) $(PROGRAMS:%=%.o)
Desarrollador de aplicaciones, propietario de la aplicación

Compilar programas ECPG

TareaDescripciónHabilidades requeridas
Cree un archivo ejecutable para ECPG.

Si tiene un archivo fuente de SQL C incrustado denominado prog1.pgc, puede crear un programa ejecutable mediante el siguiente Script.

ecpg prog1.pgc cc -I/usr/local/pgsql/include -c prog1.c cc -o prog1 prog1.o -L/usr/local/pgsql/lib -lecpg
Desarrollador de aplicaciones, propietario de la aplicación
Cree un archivo de creación para su compilación.

Cree un archivo make para compilar el programa ECPG, tal como se muestra en el siguiente archivo de ejemplo.

CFLAGS ::= $(CFLAGS) -I/usr/pgsql-12/include -g -Wall LDFLAGS ::= $(LDFLAGS) -L/usr/pgsql-12/lib -Wl,-rpath,/usr/pgsql-12/lib LDLIBS ::= $(LDLIBS) -lecpg PROGRAMS = test  .PHONY: all clean %.c: %.pgc   ecpg $< all: $(PROGRAMS) clean:     rm -f $(PROGRAMS) $(PROGRAMS:%=%.c) $(PROGRAMS:%=%.o)
Desarrollador de aplicaciones, propietario de la aplicación
TareaDescripciónHabilidades requeridas
Pruebe el código.

Pruebe el código de la aplicación que se convertirá para asegurarse de que funciona correctamente.

Desarrollador de aplicaciones, propietario de la aplicación, ingeniero de pruebas

Pruebe la aplicación

TareaDescripciónHabilidades requeridas
Pruebe el código.

Pruebe el código de la aplicación que se convertirá para asegurarse de que funciona correctamente.

Desarrollador de aplicaciones, propietario de la aplicación, ingeniero de pruebas

Recursos relacionados

Información adicional

PostgreSQL tiene un precompilador SQL integrado, ECPG, que es equivalente al precompilador Pro*C de Oracle. El ECPG convierte los programas en C que tienen instrucciones SQL incorporadas en código C estándar sustituyendo las llamadas SQL por llamadas a funciones especiales. Luego, los archivos de salida se pueden procesar con cualquier cadena de herramientas del compilador de C.

Archivos de entrada y salida

ECPG convierte cada archivo de entrada que especifique en la línea de comandos en el archivo de salida C correspondiente. Si el nombre de un archivo de entrada no tiene una extensión de archivo, se asume la extensión .pgc. La extensión del archivo se sustituye por .c para construir el nombre del archivo de salida. Sin embargo, puede anular el nombre del archivo de salida predeterminado utilizando la opción -o.

Si utiliza un guión (-) como nombre del archivo de entrada, ECPG lee el programa desde la entrada estándar y escribe en la salida estándar, a menos que lo anule mediante la opción -o.

Archivos de encabezado

Cuando el compilador de PostgreSQL compila los archivos de código C preprocesados, busca los archivos de cabecera ECPG en el directorio de PostgreSQL include. Por lo tanto, puede que tenga que usar la opción -I para dirigir el compilador al directorio correcto (por ejemplo, -I/usr/local/pgsql/include).

Bibliotecas

Los programas que utilizan código C con SQL incorporado tienen que estar enlazados a la biblioteca libecpg. Por ejemplo, puede utilizar las opciones  -L/usr/local/pgsql/lib -lecpg del enlazador.

Las aplicaciones ECPG convertidas llaman a las funciones de la biblioteca libpq a través de la biblioteca SQL integrada (ecpglib) y se comunican con el servidor PostgreSQL mediante el protocolo frontend/backend estándar.

PrivacidadTérminos del sitioPreferencias de cookies
© 2025, Amazon Web Services, Inc o sus afiliados. Todos los derechos reservados.