$ systemctl restart postgresql-9.2.24
Failed to restart postgresql-9.2.24.service: Unit not found.
Eu gostaria de criar uma nova coluna na minha tabela se essa coluna não existir. Mas se a coluna existir, gostaria de atualizá-la.
Ainda não encontrei uma resposta adequada. Alguém pode me ajudar?
No meu banco de dados postgresql 9.2 criei a seguinte tabela:
CREATE TABLE dummy(id SERIAL PRIMARY KEY,text TEXT);
E eu inseri um registro via:
INSERT INTO dummy(text) VALUES ("Hello Word");
Então eu inseri um registro assim:
INSERT INTO dummy(id,text) VALUES (2,'SAYONARA Word');
Depois, quando tentei inserir um registro assim:
INSERT INTO dummy(text) VALUES ('<3 Word');
Estou tendo o erro a seguir:
ERRO: o valor de chave duplicado viola a restrição exclusiva "dummy_pkey" DETALHE: A chave (id)=(2) já existe.
Mas quando eu reinsiro o valor:
INSERT INTO dummy(text) VALUES ('<3 Word');
Nenhum erro é lançado.
Então, como vejo, o potgresql incrementa automaticamente um valor para id por meio de um contador interno, independentemente de o valor ser inserido com sucesso ou não. Além disso, o erro ocorreu porque o postgresql não "perfura" o ID do contador existente.
Então, como posso dizer ao postgresql se o valor de autoincrement existe apenas para pular para o próximo e evitar usar o valor de autoincrement existente. (Por existente quero dizer valores que já foram definidos como chave primária).
Com o postgresql versão 9.2, estou tentando executar uma consulta que seleciona determinadas colunas para construir um objeto json. Aqui está a consulta, que eu tirei desta pergunta :
select
a.id
, json_agg((SELECT x FROM (SELECT b.fieldA) AS x)) AS item
from a join b on a.id = b.foreign_key
limit 10
Quando executo isso, recebo um erro que é bastante difícil de analisar.
ERRO: a função json_agg(record) não existe Dica: Nenhuma função corresponde ao nome e aos tipos de argumento fornecidos. Talvez seja necessário adicionar conversões de tipo explícitas.
, json_agg((SELECT x FROM (SELECT b.fieldA) AS x)) AS item
Parece que a reclamação é que json_agg não está recebendo o tipo certo de entrada, mas não entendo o porquê.
Quando executo a mesma consulta sem o json_agg
, ou seja, apenas com a expressão sub-select, recebo uma coluna com o valor de b.fieldA
dentro dos parênteses. Não tenho certeza do que os parênteses indicam em termos de um tipo de dados, mas pude ver que talvez json_agg
esteja apenas obtendo os valores e não sei como fornecer o nome da propriedade.
Alguém pode explicar onde eu errei?
Estou tentando despejar uma tabela com distinção entre maiúsculas e minúsculas chamada app_auth.User
executando o seguinte comando
pg_dump --schema=app_auth -t '"User"' -U em3local -h 127.0.0.1 -Fc -a -f <path> <dbname>
mas o que me retorna é:
pg_dump: No matching tables were found
Se eu realmente consultar meu banco de dados, a tabela existe:
<dbname>=# SELECT * FROM app_auth."User";
username | email | password | name | surname | lang | resettoken | userinfo_id | state | tos_accepted | id
----------+-------+----------+------+---------+------+------------+-------------+-------+--------------+----
alguma dica?
Preciso de ajuda para criar um gatilho que irá gerar um número de protocolo. A seguinte sequência deve ser seguida:
323926YYYYMMDDXXXXXX
- 323926 = número fixo
- AAAA = ano
- MM = mês
- DD = dia
- XXXXXX = Número que devemos gerar automaticamente de 1 que irá para 999999
Minha dificuldade é que esse número incremental deve retornar para 000001 após o decorrer do dia, resumindo: Todo dia o primeiro protocolo gerado deve iniciar com o número 000001
Meu código:
CREATE OR REPLACE FUNCTION crm.novo_ticket()
RETURNS trigger AS
$BODY$
BEGIN
NEW.protocolo = '323926' || TO_CHAR(NEW.data_cadastro,'YYYYMMDD') || '000001';
RETURN NEW;
END $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
Resolvido
SELECT
lpad(CAST((SELECT COUNT(1) + 1 INTO quant
FROM
crm.ticket a
WHERE
a.data_cadastro::DATE = CURRENT_TIMESTAMP(0)::DATE;)as VARCHAR),6,'0');
Meu ambiente:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
# rpm -q postgresql
postgresql-9.2.18-1.el7.x86_64
#
Eu usei o seguinte Streaming Replication - wiki PostgreSQL para configurar a replicação entre mestre/escravo e agora, depois de um tempo, acabo com o seguinte:
-bash-4.2$ du -h ~/archive/
19G /var/lib/pgsql/archive/
-bash-4.2$ ls -la ~/archive/ | head
total 19169360
drwxr-xr-x. 2 postgres postgres 61440 Jun 6 12:10 .
drwx------. 11 postgres postgres 4096 Jun 6 11:21 ..
-rw-------. 1 postgres postgres 16777216 Feb 6 10:19 0000000100000008000000AE
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000AF
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B0
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B1
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B2
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B3
-rw-------. 1 postgres postgres 16777216 Feb 6 10:33 0000000100000008000000B4
-bash-4.2$
devo configurar um trabalho cron para matar arquivos antigos? ou existe uma maneira postgres de fazer isso?
Preciso de uma ajuda com essa consulta faço um insert que me retorna um id, então preciso executar um UPDATE com esse id retornado...
WITH disca AS (
INSERT INTO callcenter.campanha_cliente_chamada
( id_campanha_cliente,
cod_contato,
telefone,
telefone_discar,
id_status_chamada,
tentativa,
monitorando,
acionar_proxima,
datahora_update,
datahora_registro
) VALUES (154424,1824704,'(11) 2524-9636','1125249636',1,1,0,0,CURRENT_TIMESTAMP::timestamp(0),CURRENT_TIMESTAMP::timestamp(0))
RETURNING id_campanha_cliente_chamada
) UPDATE callcenter.campanha_cliente_chamada
SET accountcode = ('D-'||id_campanha_cliente_chamada||'-'||tentativa)::varchar(128)
WHERE id_campanha_cliente_chamada = disca;
Eu tenho uma visão, que seleciona dados da TableA (TableA será descomissionada assim que migrarmos tudo). Estamos criando uma nova tabela, chamada TABLEC
, onde migraremos todos os dados de TableA para TableC no futuro.
- A razão pela qual estamos fazendo isso, é porque
tableA
é muito antigo e mal projetado. - No momento,
tableA
está sendo usado apenas para registros antigos. Todos os novos dados que seriam inseridostableA
já estão indotableC
via aplicativo. - Não consigo alterar o esquema de nenhuma tabela.
- A visualização pode ser alterada para usar
CTE
, IF, é pelo menos tão rápido quanto agora. path
não é um caminho real, mas é uma expressão regular. Será algo como:/file/account/[0-9]+
<-- depois disso existem algumas possibilidades, podem ser várias palavras diferentes (como: attach/assigned/etc).
Apesar de não migrarmos todos os dados de tableA
para tableC
, precisamos que a view seja compatível com ambas as tabelas, pois já existem novos dados indo para tableC
.
Visão:
CREATE OR REPLACE VIEW path_view AS
SELECT split_part(n1.path::text, '/'::text, 18)::integer AS id,
split_part(n1.path::text, '/'::text, 14)::integer AS clientid,
lower(n1.md5::text)::character(32) AS md5, 0 AS cont,
'00000000-1000-1000-3000-600000000000'::uuid AS guid,
n1.bytes AS byte_count,
n1.last_modified AS last_modified
FROM tablea n1
JOIN tableb s2
ON s2.path = n1.path;
-- tablea
e tableb
são praticamente os mesmos; como disse antes, foi mal projetado.
Eu preciso da view para fazer:
- Veja se os dados solicitados estão na nova tabela
tableC
- SE NÃO , então vá para
tableA
e obtenha os dados
PERGUNTA:
Como eu posso fazer isso? Eu tentei com UNION ALL
mas é muito lento.
\d tableC
:
Table "public.tablec"
--------------------+-----------------------------+-------------------------------------------------------------------
id | integer | not null default nextval('tablec_id_seq'::regclass)
e_type | integer | not null
e_id | bigint |
e_variation | character varying(16) | not null
path | character varying(255) | not null
name | character varying(255) | not null
size | bigint | not null
md5 | md5_hash | not null
modified_date | timestamp without time zone | default statement_timestamp()
created_date | timestamp without time zone | default statement_timestamp()
clientid | bigint | not null
f_id | bigint |
Preciso de uma ajuda com uma trigger, nessa trigger eu preciso passar um valor que vem da coluna queue na tabela asterisco.queue.
CREATE TRIGGER gerarconf
AFTER INSERT OR UPDATE
ON asterisk.fila
FOR EACH ROW
EXECUTE PROCEDURE asterisk.registra_gerar_conf_fila('FILA','XXXXX');
No lugar de XXXX preciso passar o valor da coluna queue que veio da inserção ou atualização da tabela asterisco.queue