JotaComm,
na verdade, minha idéia é criar uma coluna id_tabela (preciso criar também
mais outras seis colunas) e uma sequence e fazer o update atraves de um
script PHP. Alguma coisa assim, depois de ter criado um índice unico para a
coluna oid:
<?PHP
select oid from tabela; (=array)
$qtd = count(array)
for($i = 0; $i < $qtd, $i++)
update tabela set id_tabela = nextval('sequence') where oid = $oid[$i];
?>
A coluna id_tabela seria uma solução definitiva ao oid.
As outras seis colunas são a 'explosao' de campo timestamp (nu_ano, nu_mes,
... smallint).
As consultas que este sistema utiliza são em função da data e hora. cada
tabela tem entre 5 e 15Gb. Nas consultas se usa, no where, várias vezes
funções date_part e extract no timestamp e as consultas demoram muito. O
sistema é um log de mainframes onde um programa pode ser executado ao mesmo
tempo várias vezes e a utilização dos recursos monitorados podem ter os
mesmo valores. Então, também há vários agrupamentos. Fiz alguns testes com
índices e cheguei à conclusão que o melhor era eliminar o uso dessas funções
no where, com campos smallint para ano, mes, ... Mas como povoar esta
colunas sem um id de linha? Em casa usei o 8.4.rc1 e não tive problema. No
trabalho a versão é 8.2.3 ...
A solução que você deu foi perfeita. Renomeiei as tabelas com um '_old' no
final, criei as novas tabelas com oids e fiz o insert. Criei as novas
colunas e as estou povoando sem problemas.
Depois, para não mexer nos programas de carga, vou criar triggers e funções
para atualizar as novas colunas depois das novas cargas.
Att.,
Sergio
2009/6/24 JotaComm <[email protected]>
> Olá, Sérgio
>
> Uma coluna serial não resolve o problema. Ela se tornaria um auto
> incremento.
>
> Exemplo:
>
> CREATE TABLE exemplo(exemplo_id SERIAL);
>
> INSERT INTO exemplo VALUES (DEFAULT);
> INSERT INTO exemplo VALUES (DEFAULT);
> INSERT INTO exemplo VALUES (DEFAULT);
>
> SELECT * FROM exemplo;
>
> Irá mostrar 3 valores inseridos. Estes valores foram gerados pelos comandos
> INSERTs acima.
>
> Obs: Desta forma sua tabela não tem PK e tem um identificador de registro.
>
>
> 2009/6/24 sergio nogueira <[email protected]>
>
>> Novamente, JotaComm, muito obrigado.
>> As tabelas não têm PK's e não podem ter ... a idéia do oid é justamente
>> para criar, além de outras colunas, uma coluna serial. Sem o oid era
>> impossível.
>>
>> Att.,
>> Sergio
>>
>>
>>
>> 2009/6/24 JotaComm <[email protected]>
>>
>> Olá,
>>>
>>> Você pode fazer assim:
>>>
>>> CREATE TABLE tab(codigo int PRIMARY KEY,nome text);
>>>
>>> CREATE INDEX ind_tab_nome ON tab(nome);
>>>
>>> INSERT INTO tab VALUES (1,'Jota');
>>>
>>> INSERT INTO tab VALUES (2,'Jota.Comm');
>>>
>>> CREATE TABLE outra_tab(LIKE tab INCLUDING INDEXES) WITH OIDS;
>>>
>>> INSERT INTO outra_tab SELECT * FROM tab;
>>>
>>> Para testar você pode fazer:
>>>
>>> SELECT oid,* FROM outra_tab;
>>>
>>> 2009/6/24 sergio nogueira <[email protected]>
>>>
>>>> Pessoal,
>>>>
>>>> no PostgreSQl abaixo
>>>> foi criada uma tabela sem oids de colunas. Agora preciso deste campo.
>>>> O comando retorna a mensagem:
>>>> bdx => alter table tabelax set with oids; (funciona no 8.4.rc1)
>>>> ERROR: syntax error at or near "with oids"
>>>> LINE 1: alter table cv2samge set with oids;
>>>>
>>>> PostgreSQL 8.2.3 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.6
>>>> 20060404 (Red Hat 3.4.6-3)
>>>>
>>>> Pelo que entendi do manual, nesta versão não existe oids para tabelas de
>>>> usuários.
>>>>
>>>> Haveria alguma outra opção? Acrescentei novos campos mas a tabela não
>>>> tem um identificador de linha para que eu pudesse executar o update destes
>>>> campos (update tabelax set novo_campo1 = valor where id_da_linha = valor1,
>>>> novo_campo2 = valor2;
>>>>
>>>> Att.,
>>>> Sergio
>>>>
>>>> _______________________________________________
>>>> pgbr-geral mailing list
>>>> [email protected]
>>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>>
>>>>
>>> Espero ter ajudado.
>>>
>>> []s
>>> --
>>> JotaComm
>>> http://jotacomm.wordpress.com
>>> http://www.dextra.com.br/postgres
>>>
>>> _______________________________________________
>>> pgbr-geral mailing list
>>> [email protected]
>>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>>
>>>
>>
>> _______________________________________________
>> pgbr-geral mailing list
>> [email protected]
>> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>>
>>
>
> []s
> --
> JotaComm
> http://jotacomm.wordpress.com
> http://www.dextra.com.br/postgres
>
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
>
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral