A operação da coluna suspensa é escalonável?
Anteriormente, enfrentávamos problemas ao atualizar um grande número de registros porque ocupava mais espaço.
Este é o caso de uma operação de eliminação de coluna?
A operação da coluna suspensa é escalonável?
Anteriormente, enfrentávamos problemas ao atualizar um grande número de registros porque ocupava mais espaço.
Este é o caso de uma operação de eliminação de coluna?
Atualmente temos vários bancos de dados hospedados em uma única instância do postgres.
Queremos limitar o uso da CPU para bancos de dados/usuários específicos nessa instância de banco de dados.
É possível fazer essas operações de gerenciamento de recursos no postgres?
O espaço das chaves nos bloqueios de aconselhamento do PostgreSQL é privado para o banco de dados conectado ou compartilhado entre o cluster de banco de dados?
Bisbilhotando https://www.postgresql.org/docs/current/functions-admin.html#FUNCTIONS-ADVISORY-LOCKS e https://www.postgresql.org/docs/current/explicit-locking.html#ADVISORY- LOCKS a resposta não parece óbvia.
No exemplo aqui: https://www.percona.com/blog/postgresql-column-alignment-and-padding-how-to-improve-performance-with-smarter-table-design/
Por que o PostgreSQL não adiciona preenchimento de 2 bytes após int2
in t2
para alinhar a palavra corretamente?
Estou olhando nossa replicação no Postgres. Temos lógica e binária acontecendo. Eu faço um select * from pg_stat_replication order by state;
e vejo os valores lsn enviados/escrever/liberar/reproduzir. Eles se parecem 31855/17CB26A8
e os valores avançam com o tempo.
Para obter a posição atual, faço a select pg_current_wal_lsn();
e está em 319E1/73CDD590
.
Meu problema é que à medida que os valores avançam, eles quase chegam à posição atual e depois “rolam” e recomeçam. Isso é normal?
Estou na v13.10.
Minha pergunta está relacionada a um incidente de produção em que foi necessário substituir um Postgres de baixo desempenho VIEW
sob carga. Tentamos inúmeras vezes redefinir o VIEW
using CREATE OR REPLACE
; isso não foi bem-sucedido porque a consulta DDL foi bloqueada por muitas outras SELECT
consultas. Então, pouco antes de mudarmos o banco de dados de produção para uma réplica (movimento desesperado), tentamos DROP e pareceu ter sucesso quase imediatamente. Pudemos então criar a visualização. Este incidente tornou-se um tanto controverso porque não conseguimos encontrar nenhuma documentação que diferencie o comportamento de bloqueio de CREATE OR REPLACE de DROP e depois CREATE. Alguns estão se perguntando: isso realmente aconteceu? Na esperança de obter alguns insights daqueles familiarizados com os componentes internos do Postgres.
Temos uma tabela no banco de dados principal que está sendo replicada logicamente para outro banco de dados chamado SOR. Precisamos renomear esta tabela e adicionar várias tabelas à publicação no banco de dados principal. Eu tentei esse procedimento
ALTER SUBSCRIPTION my_subscription REFRESH PUBLICATION WITH (copy_data=false);
Esperei que o slot de replicação no banco de dados principal fosse liberado e, em seguida, verifiquei a contagem de registros. O banco de dados SOR perdeu alguns dados nesta janela de tempo. Existe uma maneira perfeita de renomear uma tabela na replicação lógica sem perder dados do lado do assinante? Ajudaria (copy_data=true)
?
Obrigado !
mais alguns detalhes:
Suponha que temos a seguinte tabela:
CREATE TABLE names(
id SERIAL NOT NULL,
CONSTRAINT names__pk PRIMARY KEY(id),
name TEXT NOT NULL,
CONSTRAINT names__name__unq UNIQUE(name)
);
INSERT INTO names(name)
VALUES('apple')
ON CONFLICT(name) DO NOTHING
RETURNING id;
Quando uma linha não existe, RETURNING
a cláusula funciona, mas se já existir uma linha, a consulta não retorna nada. Existe uma maneira de modificar a consulta para que ela sempre retorne o campo id
?
Estou tentando extrair algumas estatísticas de um banco de dados Postgres e fiz esta consulta:
SELECT
city,
job_count,
TO_CHAR(job_count * 100 / SUM(job_count) OVER (), '90D00%') AS job_share
FROM (
SELECT
localities.name as city,
COUNT(*) AS job_count
FROM jobads
JOIN localities ON jobads.locality_uuid = localities.uuid
WHERE jobads.external = true
GROUP BY localities.name
ORDER BY job_count DESC
) AS job_count_table;
Aqui está o resultado que ele retorna:
city | job_count | job_share
-----------------------+-----------+-----------
City #1 | 1300 | 13.00%
City #2 | 700 | 7.00%
City #3 | 400 | 4.00%
...
City #1200 | 1 | 0.01%
(1200 rows)
Ele retorna centenas de linhas e a maioria delas tem uma contagem de empregos muito baixa. Eu gostaria de mesclar todas as linhas com job_count
menos de 100 em uma única linha, para que a saída fosse parecida com esta:
city | job_count | job_share
-----------------------+-----------+-----------
City #1 | 1300 | 13.00%
City #2 | 700 | 7.00%
City #3 | 400 | 4.00%
Other cities | 2000 | 20.00%
(4 rows)
Alguma ideia de como posso fazer isso?
Como automatizar uma atualização em uma tabela, após uma alteração em outra tabela?
Diga (veja abaixo) eu tenho uma mesa countries
e uma mesa cities
. Como fazer com que, ao adicionar uma cidade na tabela cities
, a total
coluna seja atualizada automaticamente (incrementada para a cidade correspondente) na tabela countries
?
BEGIN; INSERT INTO cities VALUES ('Tokyo', 'Japan'); UPDATE countries SET total=1 WHERE name='Japan'; COMMIT;
, mas automático, faça um countries.the_city.total++
ao adicionarcities.the_city
.
postgres=# SELECT * FROM countries;
name | total
-------+-------
USA | 0
Japan | 0
(2 rows)
postgres=# SELECT * FROM cities;
name | country
------+---------
(0 rows)
CREATE DATABASE geo;
\c geo;
CREATE TABLE countries (
name VARCHAR(15) PRIMARY KEY,
total int
);
CREATE TABLE cities (
name VARCHAR(15),
country VARCHAR(15),
FOREIGN KEY (country) REFERENCES countries(name)
);
SQL padrão ou Postgres v16