sábado, 7 de dezembro de 2013

PostgreSQL - Criando campos e tabelas com e sem aspas.

Quando você utiliza o PGAdmin III para criar suas tabelas  pode deparar com o mesmo problema que eu.

No início, achei apenas estranho, achei que deveria apenas me acostumar, mas não utilizo o PostgreSQL diretamente, normalmente crio um acesso externo seja em object pascal (afinal venho do mundo do Delphi) ou em PHP. E é justamente com o PHP que mais me afetou o problema das aspas.

Usando o PGAdmin diretamente para criar minhas tabelas de dados, o sql de criação de uma delas foi automaticamente gerado assim:

CREATE TABLE midias
(
  "CODIGO_DA_MIDIA" numeric(20,0) NOT NULL, -- Código da mídia
  "PREFIXO" character(3),
  "TITULO" character(100),
  "TIPO" character(50),
  "LOCALIZACAO" character(100),
  "OBS" character(140),
  "EMPRESTADO" character(1),
  "EMP_PESSOA" character(100),
  "TEL_PESSOA" character(20),
  "EML_PESSOA" character(50),
  CONSTRAINT midias_indice PRIMARY KEY ("CODIGO_DA_MIDIA" )
);

Funciona, e perfeitamente, mas se você entrar um comando do tipo:

select * from midias where CODIGO_DA_MIDIA = 1

O PostgreSQL vai dizer que sua sintaxe está errada, ou seja, você deveria ter utilizado:

select * from midias where "CODIGO_DA_MIDIA" = 1

Isto irá levar a sérios problemas especialmente quando você tentar definir uma variável no PHP, do tipo:

$teste = "select * from midias where "CODIGO_DA_MIDIA" = 1"

Veja que o PHP vai começar uma imensa confusão por causa de suas aspas.

O que acontece é que o PGAdmin se utiliza das aspas como padrão, então você, ao criar suas tabelas utilize o comando create, mas sem elas assim lhe poupará uma imensa dor de cabeça, assim:

CREATE TABLE midias
(
  codigo_da_midia numeric(20,0) NOT NULL, -- Código da mídia
  prefixo character(3),
  titulo character(100),
  tipo character(50),
  localizacao character(100),
  obs character(140),
  emprestado character(1),
  emp_pessoa character(100),
  tel_pessoa character(20),
  eml_pessoa character(50),
  CONSTRAINT midias_indice PRIMARY KEY (codigo_da_midia )
);

Assim, depois de popular sua tabela, sua query ficará assim:

select * from midias where codigo_da_midia = 1

sem a necessidade do uso de aspas. Facilitando a vida na hora de escrever seu script PHP ou seus códigos em Object Pascal (Quando eu falo desta última, estou me referindo ao Lazarus, viu)

Lembrando que o Linux é case sensitive né!

____________________________________________________
Seja Livre. Use GNU/Linux

Nenhum comentário:

Postar um comentário