PolarDB for PostgreSQL (Compatible with Oracle) oferece drivers ODBC para sistemas Unix e Windows. Este tópico explica como usar esses drivers para conectar-se ao seu cluster.
Pré-requisitos
Você criou uma conta de banco de dados no cluster PolarDB. Para mais informações, consulte Crie uma conta de banco de dados.
Você adicionou os endereços IP dos hosts que precisam acessar o cluster PolarDB a uma lista de permissões. Para mais informações, consulte Defina uma lista de permissões de cluster.
Seu sistema Windows é Windows 7 ou superior com o Service Pack 1 instalado.
-
As seguintes ferramentas estão instaladas no seu sistema Unix ou Linux:
Libtool 1.5.10 ou superior.
unixODBC-devel.
PolarDB-Tools. Para instruções de download e instalação, consulte PolarDB-Tools.
Baixe o driver
Sistemas Unix ou Linux x86 de 32 bits: PolarDB-ODBC_Linux_X86_32.tar.gz
Sistemas Unix ou Linux x86 de 64 bits: PolarDB-ODBC_Linux_X86_64.tar.gz
Sistemas Unix ou Linux ARM de 64 bits: PolarDB-ODBC_Linux_arm_64.tar.gz
Sistemas Windows x86 de 64 bits: PolarDB-ODBC_Windows_x86_64.7z
Sistemas Windows x86 de 32 bits: PolarDB-ODBC_Windows_x86_32.7z
Instale o ODBC no Windows
Baixe o pacote de instalação correspondente à arquitetura do seu Windows. Para obter links de download, consulte Baixe o driver.
Após concluir o download, descompacte o pacote ODBC.
Execute o arquivo
install.batcomo administrador. Quando a instalação terminar, pressione qualquer tecla para sair.Opcional: Para desinstalar o pacote ODBC, execute o arquivo
uninstall.bat.
Conectar-se ao PolarDB no Windows
No Control Panel, abra Tools.
Na página Tools, localize e abra ODBC Data Sources.
Na caixa de diálogo ODBC Data Source Administrator, clique em Add.
Selecione POLARDB (UNICODE) e clique em Complete.
-
Na caixa de diálogo, insira as seguintes informações.
Parâmetro
Descrição
Data Source
Nome da fonte de dados.
Description
Descrição da fonte de dados.
Database
Nome do banco de dados de destino.
SSL Mode
Selecione um método de criptografia ssl.
Server
Endpoint do banco de dados de destino. Para visualizar o endpoint de um cluster PolarDB, consulte Visualize ou solicite um endpoint.
Port
Porta do banco de dados de destino. O valor padrão é 1521.
User Name
Nome de usuário da conta do banco de dados.
Password
Senha da conta do banco de dados.
Clique em Save.
Instale o ODBC no Unix ou Linux
-
Execute o comando a seguir para definir a variável de ambiente LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=<PolarDB-ODBC/lib/path> -
Execute o comando a seguir para definir a variável de ambiente ODBCINI:
export ODBCINI=<your odbc.init file path> Baixe o driver ODBC correspondente à arquitetura e versão do seu sistema operacional. Para obter links de download, consulte Baixe o driver.
-
Instale o driver ODBC.
NotaO pacote do driver ODBC do PolarDB é portátil. Use-o imediatamente após a descompactação.
tar -zxvf polardb-odbc.tar.gzA estrutura de diretórios é a seguinte:
├── include ├── lib └── samples 3 directories
Conectar-se ao PolarDB no Unix ou Linux
-
Instale o Libtool no seu servidor Linux. A versão do Libtool deve ser 1.5.10 ou superior.
yum install -y libtool -
Instale o unixODBC-devel no seu servidor Linux.
yum install -y unixODBC-devel -
Edite o arquivo
odbc.ini.vim $ODBCINI -
Adicione as seguintes informações ao arquivo
odbc.ini.[POLARDB] Description = ODBC for POLARDB Driver = /home/user/target/lib/unix/polardb-odbc.so Driver64 = /home/user/target/lib/unix/polardb-odbc.so Database = <Your database name> Servername = <Your database endpoint> Password = <Your password> Port = <Your port> Username = <Your username> Trace = yes TraceFile = /tmp/odbc.log FileUsage = 1NotaPara visualizar o endpoint de um cluster PolarDB, consulte Visualize ou solicite um endpoint.
No exemplo, substitua /home/user pelo caminho real que contém a pasta
target.
-
Conecte-se ao PolarDB.
$isql -v POLARDB +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
Exemplos para Unix ou Linux
Esta seção demonstra como executar os arquivos de teste Test1 e Test2.
Antes de executar os exemplos, crie e preencha a seguinte tabela no seu banco de dados PolarDB:
create table emp(empno number(4),
ename varchar2(10),
job varchar2(9),
mgr number (4),
hiredate date,
sal number(7,2),
comm number(7,2),
deptno number(2));
insert into emp values(7369,'smith','clerk',7902 ,to_date('17-12-1980','dd-mm-yyyy'),800,null, 20 );
insert into emp values(7499,'allen','salesman',7698 ,to_date('20-2-1981','dd-mm-yyyy'),1600, 300 , 30 );
insert into emp values(7521,'ward' ,'salesman' ,7698 ,to_date(' 22-2-1981' , 'dd-mm-yyyy' ), 1250 , 500 , 30 );
insert into emp values(7566,'jones','manager' , 7839 ,to_date(' 2-4-1981' , 'dd-mm-yyyy' ), 2975 , null , 20 );
insert into emp values(7654,'martin','salesman',7698 ,to_date(' 28-9-1981' , 'dd-mm-yyyy' ), 1250 , 1400 , 30 );
insert into emp values(7698,'blake','manager', 7839 ,to_date(' 1-5-1981' , 'dd-mm-yyyy' ), 2850 , null , 30 );
insert into emp values(7782,'clark','manager', 7839 ,to_date(' 9-6-1981' , 'dd-mm-yyyy' ), 2450 , null , 10 );
insert into emp values(7788,'scott','analyst', 7566 ,to_date(' 13-7-1987' , 'dd-mm-rr ' ) - 85 , 3000 , null , 20 );
insert into emp values(7839,'king', 'president ' , null ,to_date('17-11-1981 ' , 'dd-mm-yyyy' ), 5000 , null , 10 );
insert into emp values(7844,'turner','salesman ' , 7698 ,to_date('8-9-1981 ' , 'dd-mm-yyyy' ), 1500 , 0 , 30 );
insert into emp values(7876,'adams', 'clerk' , 7788 ,to_date('13-7-1987' , 'dd-mm-rr ' ) - 51 , 1100 , null , 20 );
insert into emp values(7900,'james', 'clerk' , 7698 ,to_date('3-12-1981' , 'dd-mm-yyyy' ), 950 , null , 30 );
insert into emp values(7902,'ford', 'analyst' , 7566 ,to_date('3-12-1981' , 'dd-mm-yyyy' ), 3000 , null , 20 );
insert into emp values(7934,'miller','clerk ' , 7782 ,to_date('23-1-1982' , 'dd-mm-yyyy' ), 1300 , null , 10 );
-
Execute o comando a seguir para descompactar o pacote do driver ODBC.
tar -zxvf polardb-odbc.tar.gz -
Execute o comando a seguir para abrir a pasta
polardb-odbc.cd polardb-odbc -
Abra a pasta
samplesdentro do diretório do driver ODBC.cd samples -
Compile os exemplos de teste. Após a conclusão da compilação, dois arquivos de teste,
Test1eTest2, serão gerados.make -
Execute
Test1eTest2../Test1 ## Run Test1 ./Test2 ## Run Test2NotaO
Test1demonstra operações de criação, leitura, atualização e exclusão (CRUD). OTest2mostra como usar um cursor e um parâmetro de saída.Os trechos de código a seguir servem apenas para fins de demonstração. Para o código completo, consulte os arquivos
Test1eTest2na pastasamplesdo pacote do driver.
O código a seguir é um exemplo do Test1:
...
int main(int argc, char* argv[])
{
/* Initialization */
RETCODE rCode;
HENV *hEnv = (HENV*)malloc(sizeof(HENV));
HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
Connect("POLARDB","user","",&hEnv,&hDBC);
rCode = SQLAllocStmt(*hDBC,hStmt);
rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt);
/* CRUD operations */
ExecuteInsertStatement(&hStmt,(UCHAR*) "INSERT INTO EMP(EMPNO,ENAME) VALUES((SELECT COUNT(EMPNO) FROM EMP),'JACKSON')");
ExecuteUpdate(&hStmt,(UCHAR*) "UPDATE EMP SET ENAME='ODBC Test' WHERE EMPNO < 100");
ExecuteDeletStatement(&hStmt,(UCHAR*) "DELETE FROM EMP WHERE EMPNO<100");
ExecuteSimple_Select(&hStmt,(UCHAR*) "SELECT EMPNO,ENAME,JOB,MGR,HIREDATE FROM EMP where empno = 7369");
/* Close the connection */
Disconnect(&hEnv,&hDBC,&hStmt);
/* Clean up */
free(hEnv);
free(hDBC);
free(hStmt);
return 0;
}
O código a seguir é um exemplo do Test2:
int main(int argc, char* argv[])
{
/* Definitions */
RETCODE rCode;
SQLUSMALLINT a;
SQLINTEGER Num1IndOrLen;
SQLSMALLINT iTotCols = 0;
int j;
SDWORD cbData;
/* Initialization */
HENV *hEnv = (HENV*)malloc(sizeof(HENV));
HDBC *hDBC = (HDBC*)malloc(sizeof(HDBC));
HSTMT *hStmt = (HSTMT*)malloc(sizeof(HSTMT));
HSTMT *hStmt1 = (HSTMT*)malloc(sizeof(HSTMT));
/* Establish a connection */
Connect("POLARDB","user","***",&hEnv,&hDBC);
rCode = SQLAllocStmt(*hDBC,hStmt);
rCode = SQLAllocStmt(*hDBC,hStmt1);
rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt);
rCode = SQLAllocHandle(SQL_HANDLE_STMT,*hDBC,hStmt1);
/* Begin */
ExecuteSimple_Select(&hStmt1,(UCHAR*) "BEGIN;");
/* Prepare */
RETCODE rc = SQLPrepare((*hStmt),(SQLCHAR*)"{ call refcur_inout_callee2(?,?)}",SQL_NTS);
rc = SQLBindParameter((*hStmt),1, SQL_PARAM_INPUT_OUTPUT, SQL_C_CHAR,SQL_REFCURSOR,0, 31,
strName, 31, &Num1IndOrLen);
rc = SQLBindParameter((*hStmt),2, SQL_PARAM_INPUT_OUTPUT, SQL_C_CHAR,SQL_REFCURSOR,0, 31,
&strName1, 31, &Num1IndOrLen);
Num1IndOrLen=0;
/* Execute */
rc = SQLExecute((*hStmt));
if(rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
{
printf("\nstrName _________ = %s\n",strName);
printf("\nstrName 1_________ = %s\n",strName1);
}
printf("\n First Cursor as OUT Parameter \n") ;