AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / 问题

All perguntas(dba)

Martin Hope
Mark Sinkinson
Asked: 2018-02-14 05:17:37 +0800 CST

Se um deadlock de evento de troca de paralelismo for sem vítimas, isso é um problema?

  • 15

Estamos vendo muitos desses deadlocks de threads paralelos intra-consulta em nosso ambiente de produção (SQL Server 2012 SP2 - sim... eu sei...), no entanto, ao analisar o XML de deadlock que foi capturado por meio de eventos estendidos, a lista de vítimas está vazia.

<victim-list />

O deadlock parece estar entre 4 threads, dois com o WaitType="e_waitPipeNewRow"e dois com o WaitType="e_waitPipeGetRow".

 <resource-list>
  <exchangeEvent id="Pipe13904cb620" WaitType="e_waitPipeNewRow" nodeId="19">
   <owner-list>
    <owner id="process4649868" />
   </owner-list>
   <waiter-list>
    <waiter id="process40eb498" />
   </waiter-list>
  </exchangeEvent>
  <exchangeEvent id="Pipe30670d480" WaitType="e_waitPipeNewRow" nodeId="21">
   <owner-list>
    <owner id="process368ecf8" />
   </owner-list>
   <waiter-list>
    <waiter id="process46a0cf8" />
   </waiter-list>
  </exchangeEvent>
  <exchangeEvent id="Pipe13904cb4e0" WaitType="e_waitPipeGetRow" nodeId="19">
   <owner-list>
    <owner id="process40eb498" />
   </owner-list>
   <waiter-list>
    <waiter id="process368ecf8" />
   </waiter-list>
  </exchangeEvent>
  <exchangeEvent id="Pipe4a106e060" WaitType="e_waitPipeGetRow" nodeId="21">
   <owner-list>
    <owner id="process46a0cf8" />
   </owner-list>
   <waiter-list>
    <waiter id="process4649868" />
   </waiter-list>
  </exchangeEvent>
 </resource-list>

Então:

  1. A Lista de Vítimas está vazia
  2. O aplicativo que executa a consulta não apresenta erro e conclui a consulta
  3. Até onde podemos ver, não há nenhum problema óbvio, exceto que o gráfico é capturado

Portanto, isso é algo para se preocupar além do ruído?

Editar: Graças à resposta de Paul, posso ver onde o problema provavelmente ocorre e parece se resolver com o vazamento de tempdb. insira a descrição da imagem aqui

sql-server deadlock
  • 2 respostas
  • 5168 Views
Martin Hope
MH21209
Asked: 2018-02-06 12:40:19 +0800 CST

Compactar o banco de dados PostgreSQL

  • 15

Eu tenho um grande banco de dados PostgreSQL com mais de 500 GB de tamanho, o que é muito grande. Existe alguma maneira de compactar o banco de dados para um tamanho mais gerenciável? Eu tentei fazer isso com o SquashFS e o banco de dados compactado para 177 GB, no entanto, o PostgreSQL exige que o banco de dados tenha acesso de gravação e os sistemas Squashed sejam somente leitura. Os usuários de banco de dados mais experientes têm alguma sugestão para atingir esse objetivo?

O banco de dados contém dados GIS para o planeta e será usado localmente em um sistema implantado. Atualmente, ele fica em um SSD de 1 TB, no entanto, estou tentando evitar colocar um disco rígido adicional simplesmente para acomodar um grande banco de dados. O banco de dados funciona conforme desejado sem problemas, eu gostaria simplesmente de comprimi-lo para um tamanho mais gerenciável e evitar colocá-lo em uma unidade separada.

postgresql compression
  • 1 respostas
  • 12354 Views
Martin Hope
yogesh.j
Asked: 2018-01-03 04:56:25 +0800 CST

Qual é a diferença entre mongodump e mongoexport?

  • 15

Eu sei que quando temos que fazer backup completo no nível de banco de dados e coleção, usamos mongodump, mas com mongodump podemos fazer backup de um registro específico também, então qual é a diferença entre mongodump e mongoexport?

mongodb mongodump
  • 3 respostas
  • 15359 Views
Martin Hope
Nam G VU
Asked: 2017-11-03 00:12:09 +0800 CST

Como restaurar do backup .gz com o novo nome do banco de dados usando o mongorestore r3.2.9?

  • 15

Estou tentando fazer backup/restaurar o banco de dados mongodb de/para arquivos .gz como script de exemplo aqui

#01 create .gz backup - ok for r3.2.9 and r3.4.10 
mongodump --db ${DB_NAME} --gzip --archive=${BACKUP_FILE_GZ}

#02 restore from .gz file - NOT ok for r3.2.9
mongorestore --gzip --archive=${BACKUP_FILE_GZ} --nsFrom "${DB_NAME}.*" --nsTo "${DB_NAME_RESTORE}.*"

Etapa 01, ou seja, o backup é bom tanto para a versão mongodb r3.2.9quanto para r3.4.10; embora o passo 02 NÃO funcione parar3.2.9

Como posso obter a versão do mongorestorer3.2.9 para restaurar do arquivo .gz e poder renomear o banco de dados?

ps

Temos a solução aqui, mas isso requer que o backup seja uma pasta; meus arquivos de backup são enormes, ou seja, 1Gb-2Gb, então a extração é muito demorada.

backup mongodb
  • 5 respostas
  • 58554 Views
Martin Hope
Professional Sounding Name
Asked: 2017-10-19 15:52:40 +0800 CST

Nem DBCC FREEPROCCACHE nem DBCC FREESYSTEMCACHE('SQL Plans') fazem nada para liberar a memória CACHESTORE_SQLCP

  • 15

Os planos Sql CACHESTORE_SQLCP ocupam > 38 GB após alguns dias.

Já estamos executando com a opção "otimizar para cargas de trabalho ad hoc" ativada. (Entity Framework e relatórios personalizados criam muitos ad hocs!)

SQL Server 2016 SE 3.00.2164.0.v1 no AWS RDS com espelhamento multi-AZ

Quando eu corro:

DBCC FREESYSTEMCACHE('SQL Plans');

ou

DBCC FREEPROCCACHE

ou

DBCC FREESYSTEMCACHE ('SQL Plans') WITH MARK_IN_USE_FOR_REMOVAL

ou

DBCC FREESYSTEMCACHE ('ALL') WITH MARK_IN_USE_FOR_REMOVAL;

Parece que não esclarece:

SELECT TOP 1 type, name, pages_kb FROM sys.dm_os_memory_clerks ORDER BY pages_kb  desc

type                name        pages_kb
CACHESTORE_SQLCP    SQL Plans   38321048

Eu estava executando com o Query Store habilitado, mas desabilitei para ver se isso estava interferindo em alguma coisa, não pareceu ajudar, mas deixei de lado.

O que é realmente estranho também é

SELECT COUNT(*) FROM sys.dm_exec_cached_plans

é 1-3 ou mais (parece mostrar apenas as consultas em execução no momento), mesmo que toda essa memória esteja reservada, mesmo antes de eu tentar limpar qualquer coisa. o que estou perdendo?

CACHESTORE_SQLCP está ocupando mais de 60% de toda a memória disponível, o que é uma preocupação porque há esperas de memória acontecendo ocasionalmente. Além disso, tivemos que matar uma rotina DBCC CHECKDB durante o fim de semana que estava durando 4 horas porque memória insuficiente estava acumulando esperas (ela foi concluída instantaneamente sem erros com PHYSICAL_ONLY ativado).

Existe alguma maneira de recuperar essa memória (além de reinicializações noturnas!?)?

Gráfico de consumo de memória Tabela de consumo de memória

Atualização de comentários/respostas

Quando eu corro

SELECT * FROM sys.fn_my_permissions(NULL,NULL)

eu recebo

entity_name subentity_name  permission_name
server      CONNECT SQL
server      CREATE ANY DATABASE
server      ALTER ANY LOGIN
server      ALTER ANY LINKED SERVER
server      ALTER ANY CONNECTION
server      ALTER TRACE
server      VIEW ANY DATABASE
server      VIEW ANY DEFINITION
server      VIEW SERVER STATE
server      ALTER SERVER STATE
server      CREATE SERVER ROLE
server      ALTER ANY SERVER ROLE

Que inclui a ALTER SERVER STATEpermissão necessária.

A saída de DBCC FREEPROCCACHEé

Execução DBCC concluída. Se o DBCC imprimir mensagens de erro, entre em contato com o administrador do sistema.

Qual é a mensagem padrão. Outras funções DBCC não suportadas pelo RDS fornecem mensagens de erro sobre permissões.

(Um dia depois e depois de executar isso novamente, o SQL Plans ainda é 38.321.280 kb)

Atualização de comentários/respostas

SELECT pool_id, name, cache_memory_kb, compile_memory_kb FROM sys.dm_resource_governor_resource_pools

saídas:

pool_id name    cache_memory_kb  compile_memory_kb
1   internal    38368408         1168080

DBCC FREEPROCCACHE ('internal')não faz nada diferente

Atualizar

O log de erros do SQL registra o seguinte a cada vez:

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'SQL Plans' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

2017-10-19 14:26:47.22 spid85 SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Bound Trees' cachestore (part of plan cache) due to 'DBCC FREEPROCCACHE' or 'DBCC FREESYSTEMCACHE' operations.

Atualizar

Há uma atualização de versão do mecanismo no RDS de 13.00.2164.0.v1 para 13.00.4422.0.v1 disponível. Embora esteja configurado para atualização automática de versão secundária, não parece nos manter atualizados com as últimas. Vai reiniciar e instalar isso neste fim de semana para ver se isso ajuda.

sql-server optimization
  • 2 respostas
  • 2903 Views
Martin Hope
Joey Yi Zhao
Asked: 2017-09-13 16:30:44 +0800 CST

Como especificar o banco de dados de autenticação e o banco de dados de destino separadamente na conexão mongodb uri?

  • 15

Estou usando esta conexão uri para conectar ao mongodb: mongodb://user:password@localhost/admin. Ele usará admincomo autenticação de bot e banco de dados de destino. Como posso fazer o uri usar admincomo autenticação, mas permitir que eu me conecte a um banco de dados diferente? Por favor, veja o comando abaixo como um exemplo:

mongo --host localhost -u user -p password --authentication admin test

o comando acima usará admincomo banco de dados de autenticação, mas se conectará ao testbanco de dados. como posso fazer a mesma coisa em uri?

mongodb mongodb-3.4
  • 2 respostas
  • 44966 Views
Martin Hope
Philᵀᴹ
Asked: 2017-06-01 00:39:13 +0800 CST

Consulta detalhando diferenças entre linhas para uma grande quantidade de dados

  • 15

Eu tenho várias tabelas grandes, cada uma com mais de 300 colunas. O aplicativo que estou usando cria "arquivos" de linhas alteradas fazendo uma cópia da linha atual em uma tabela secundária.

Considere um exemplo trivial:

CREATE TABLE dbo.bigtable
(
  UpdateDate datetime,
  PK varchar(12) PRIMARY KEY,
  col1 varchar(100),
  col2 int,
  col3 varchar(20),
  .
  .
  .
  colN datetime
);

Tabela de arquivo:

CREATE TABLE dbo.bigtable_archive
(
  UpdateDate datetime,
  PK varchar(12) NOT NULL,
  col1 varchar(100),
  col2 int,
  col3 varchar(20),
  .
  .
  .
  colN datetime
);

Antes de qualquer atualização ser executada em dbo.bigtable, uma cópia da linha é criada em dbo.bigtable_archive, e dbo.bigtable.UpdateDateé atualizada com a data atual.

Portanto UNION, juntar as duas tabelas e agrupar por PKcria uma linha do tempo de alterações, quando ordenadas por UpdateDate.

Desejo criar um relatório detalhando as diferenças entre as linhas, ordenadas por UpdateDate, agrupadas por PK, no seguinte formato:

PK,   UpdateDate,  ColumnName,  Old Value,   New Value

Old Valuee New Valuepodem ser as colunas relevantes convertidas para a VARCHAR(MAX)(não há TEXTou BYTEcolunas envolvidas), pois não preciso fazer nenhum pós-processamento dos próprios valores.

No momento, não consigo pensar em uma maneira sensata de fazer isso para uma grande quantidade de colunas, sem recorrer a gerar as consultas programaticamente - talvez tenha que fazer isso.

Aberto a muitas ideias, então adicionarei uma recompensa à pergunta após 2 dias.

sql-server sql-server-2008-r2
  • 6 respostas
  • 658 Views
Martin Hope
Sybil
Asked: 2017-05-24 07:36:30 +0800 CST

o que é "planSummary: IDHACK"?

  • 15

Esta Consulta verifica apenas um documento e retorna apenas um documento. Mas isso é muito lento:

2017-05-22T07:13:24.548+0000 I COMMAND [conn40] query databasename.collectionname query: { _id: ObjectId('576d4ce3f2d62a001e84a9b8') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8009ms
2017-05-22T07:13:24.549+0000 I COMMAND [conn10] query databasename.collectionname query: { _id: ObjectId('576d4db35de5fa001ebdd77a') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8010ms
2017-05-22T07:13:24.553+0000 I COMMAND [conn47] query databasename.collectionname query: { _id: ObjectId('576d44b7ea8351001ea5fb22') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8014ms
2017-05-22T07:13:24.555+0000 I COMMAND [conn52] query databasename.collectionname query: { _id: ObjectId('576d457ceb82a0001e205bfa') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8015ms
2017-05-22T07:13:24.555+0000 I COMMAND [conn41] query databasename.collectionname query: { _id: ObjectId('576d457ec0697c001e1e1779') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8015ms
2017-05-22T07:13:24.555+0000 I COMMAND [conn39] query databasename.collectionname query: { _id: ObjectId('576d44b8ea8351001ea5fb27') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8015ms
2017-05-22T07:13:24.561+0000 I COMMAND [conn34] query databasename.collectionname query: { _id: ObjectId('576d44b55de5fa001ebdd31e') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8022ms
2017-05-22T07:13:24.564+0000 I COMMAND [conn32] query databasename.collectionname query: { _id: ObjectId('576d4df6d738a7001ef2a235') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8025ms
2017-05-22T07:13:24.564+0000 I COMMAND [conn51] query databasename.collectionname query: { _id: ObjectId('576d48165de5fa001ebdd55a') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8024ms
2017-05-22T07:13:24.564+0000 I COMMAND [conn17] query databasename.collectionname query: { _id: ObjectId('576d44c19f2382001e953717') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8025ms
2017-05-22T07:13:24.564+0000 I COMMAND [conn8] query databasename.collectionname query: { _id: ObjectId('576d45d256c22e001efdb382') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8025ms
2017-05-22T07:13:24.564+0000 I COMMAND [conn42] query databasename.collectionname query: { _id: ObjectId('576d44bd57c75e001e6e2302') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8025ms
2017-05-22T07:13:24.564+0000 I COMMAND [conn6] query databasename.collectionname query: { _id: ObjectId('576d44b394e731001e7cd530') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8025ms
2017-05-22T07:13:24.571+0000 I COMMAND [conn31] query databasename.collectionname query: { _id: ObjectId('576d4dbcb7289f001e64e32b') } planSummary: IDHACK ntoskip:0 keysExamined:1 docsExamined:1 idhack:1 cursorExhausted:1 keyUpdates:0 writeConflicts:0 numYields:0 nreturned:1 reslen:42 locks:{ Global: { acquireCount: { r: 2 } }, Database: { acquireCount: { r: 1 } }, Collection: { acquireCount: { r: 1 } } } 8032ms

Isso parece uma E/S de disco muito lenta. O que planSummary: IDHACKsignifica? Mais alguma informação para IDHACK?

explain mongodb
  • 1 respostas
  • 11167 Views
Martin Hope
Metro Smurf
Asked: 2017-05-15 08:22:54 +0800 CST

Subconsulta de baixo desempenho com comparações de data

  • 15

Ao usar uma subconsulta para encontrar a contagem total de todos os registros anteriores com um campo correspondente, o desempenho é terrível em uma tabela com apenas 50 mil registros. Sem a subconsulta, a consulta é executada em alguns milissegundos. Com a subconsulta, o tempo de execução é superior a um minuto.

Para esta consulta, o resultado deve:

  • Inclua apenas os registros dentro de um determinado intervalo de datas.
  • Inclua uma contagem de todos os registros anteriores, sem incluir o registro atual, independentemente do intervalo de datas.

Esquema de Tabela Básico

Activity
======================
Id int Identifier
Address varchar(25)
ActionDate datetime2
Process varchar(50)
-- 7 other columns

Dados de exemplo

Id  Address     ActionDate (Time part excluded for simplicity)
===========================
99  000         2017-05-30
98  111         2017-05-30
97  000         2017-05-29
96  000         2017-05-28
95  111         2017-05-19
94  222         2017-05-30

resultados esperados

Para o intervalo de datas de 2017-05-29a2017-05-30

Id  Address     ActionDate    PriorCount
=========================================
99  000         2017-05-30    2  (3 total, 2 prior to ActionDate)
98  111         2017-05-30    1  (2 total, 1 prior to ActionDate)
94  222         2017-05-30    0  (1 total, 0 prior to ActionDate)
97  000         2017-05-29    1  (3 total, 1 prior to ActionDate)

Os registros 96 e 95 são excluídos do resultado, mas são incluídos na PriorCountsubconsulta

Consulta atual

select 
    *.a
    , ( select count(*) 
        from Activity
        where 
            Activity.Address = a.Address
            and Activity.ActionDate < a.ActionDate
    ) as PriorCount
from Activity a
where a.ActionDate between '2017-05-29' and '2017-05-30'
order by a.ActionDate desc

Índice atual

CREATE NONCLUSTERED INDEX [IDX_my_nme] ON [dbo].[Activity]
(
    [ActionDate] ASC
)
INCLUDE ([Address]) WITH (
    PAD_INDEX = OFF, 
    STATISTICS_NORECOMPUTE = OFF, 
    SORT_IN_TEMPDB = OFF, 
    DROP_EXISTING = OFF, 
    ONLINE = OFF, 
    ALLOW_ROW_LOCKS = ON, 
    ALLOW_PAGE_LOCKS = ON
)

Pergunta

  • Quais estratégias podem ser usadas para melhorar o desempenho dessa consulta?

Edit 1
Em resposta à pergunta do que posso modificar no banco de dados: posso modificar os índices, mas não a estrutura da tabela.

Edit 2
Agora adicionei um índice básico na Addresscoluna, mas isso não pareceu melhorar muito. Atualmente, estou encontrando um desempenho muito melhor ao criar uma tabela temporária e inserir os valores sem o PriorCounte atualizar cada linha com suas contagens específicas.

Editar 3
O Spool de Índice Joe Obbish (resposta aceita) encontrado foi o problema. Depois de adicionar um novo nonclustered index [xyz] on [Activity] (Address) include (ActionDate), os tempos de consulta caíram de mais de um minuto para menos de um segundo sem usar uma tabela temporária (consulte a edição 2).

performance subquery
  • 1 respostas
  • 444 Views
Martin Hope
Alex
Asked: 2017-04-26 05:14:54 +0800 CST

PostgreSQL 9.3.13, Como atualizo as visualizações materializadas com diferentes usuários?

  • 15

[Acho que a causa raiz desse problema é que eu não entendo permissões e privilégios...]

Então, para montar o cenário, a configuração que tenho é um DB, chame de MyDb .

Eu tenho dois usuários, spu1 e u1 , spu1 é um superusuário e u1 um usuário 'regular'. O proprietário do MyDb é spu1 . Acho que também devo dizer que o u1 criou bancos de dados e criou privilégios de função herdados de uma função de grupo.

Eu tenho um esquema sch1 , que é um esquema definido pelo usuário.

Dentro desse esquema eu tenho uma tabela, chamo tbl1 , e uma visão materializada, chamo mvw1 .

O dono do tbl1 é o spu1 , o dono do mvw1 é u1 .


O problema:

Na configuração atual, conforme descrito acima, não consigo atualizar mvw1 como u1 ou spu1 . Eu simplesmente recebo o erro divertido abaixo (que pesquisei extensivamente, mas não encontrei nada que resolva bastante minha configuração ..).

ERROR:  permission denied for relation tbl1
********** Error **********

ERROR: permission denied for relation tbl1
SQL state: 42501

eu descobri que

  1. Alterar o proprietário de mvw1 para spu1 , me permite atualizar como spu1 .
  2. Executar o abaixo me permite atualizar mvw1 como u1 .

Estou tentando descobrir quais são as permissões ausentes (idealmente o mínimo necessário) que preciso conceder ao usuário regular, u1 , para que eu possa atualizar essa visualização quando estiver conectado como eles.

A primeira opção, embora seja bom saber, não resolve o meu problema. A segunda opção parece que estou de fato concedendo permissões de superusuário a um não superusuário, ou melhor, concedendo privilégios maiores do que preciso.

Se alguém puder me explicar o que exatamente está acontecendo aqui (ou apontar quais informações eu perdi na descrição do meu problema necessário para resolvê-lo), e deixe-me saber se minha segunda opção é de fato o caminho a seguir ou de uma alternativa melhor?

Muito obrigado!

postgresql permissions
  • 3 respostas
  • 12650 Views
Prev
Próximo

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve