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
DavidN
Asked: 2014-02-14 10:36:41 +0800 CST

Por que o erro de consulta com conjunto de resultados vazio no SQL Server 2012?

  • 33

Ao executar as seguintes consultas no MS SQL Server 2012, a segunda consulta falha, mas não a primeira. Além disso, quando executadas sem as cláusulas where, ambas as consultas falharão. Não sei por que qualquer um deles falharia, já que ambos deveriam ter conjuntos de resultados vazios. Qualquer ajuda/insight é apreciada.

create table #temp
(id     int primary key)

create table #temp2
(id     int)

select 1/0
from #temp
where id = 1

select 1/0
from #temp2
where id = 1
sql-server sql-server-2012
  • 2 respostas
  • 7306 Views
Martin Hope
Antony
Asked: 2014-01-28 23:29:10 +0800 CST

O superusuário não tem permissão para fazer login

  • 33

Eu criei um portal de superusuário com o seguinte comando

create role portal with superuser password 'portal'

Quando tentei fazer login no postgres com o usuário do portal, estou recebendo o seguinte erro no Rails.

FATAL:  role "portal" is not permitted to log in

Não consigo acompanhar o que está acontecendo.

é claro que posso alterar o usuário com o comando de login para permitir que o usuário do portal faça login. Gostaria de entender por que o superusuário não consegue fazer o login.

postgresql
  • 2 respostas
  • 52887 Views
Martin Hope
Computernerd
Asked: 2014-01-24 23:03:05 +0800 CST

Uso de HAVING sem GROUP BY em consultas SQL

  • 33

Para usar HAVINGem consultas SQL, deve haver um GROUP BYpara agregar os nomes das colunas?

Existem casos especiais em que é possível usar HAVINGsem GROUP BYconsultas SQL?

Eles devem coexistir ao mesmo tempo?

aggregate
  • 4 respostas
  • 113406 Views
Martin Hope
Nate
Asked: 2013-08-21 07:22:32 +0800 CST

O EF Code First usa nvarchar(max) para todas as strings. Isso prejudicará o desempenho da consulta?

  • 33

Tenho alguns bancos de dados criados usando Entity Framework Code First; os aplicativos estão funcionando e, em geral, estou muito feliz com o que o Code First me permite fazer. Eu sou um programador primeiro, e um DBA segundo, por necessidade. Estou lendo sobre DataAttributes para descrever melhor em C# o que quero que o banco de dados faça; e minha pergunta é: que penalidade estarei comendo por ter essas nvarchar(max)strings na minha tabela (veja o exemplo abaixo)?

Existem várias colunas nesta tabela em particular; em C# eles são definidos como tal:

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Message { get; set; }
    public string Source { get; set; }
    public DateTime Generated { get; set; }
    public DateTime Written { get; set; }

Espero consultar e/ou classificar com base em Nome, Origem, Gerado e Escrito. Espero que Name e Source estejam no comprimento de 0-50 caracteres, ocasionalmente até 150. Espero que esta tabela comece bem pequena (<100k linhas), mas cresça significativamente ao longo do tempo (>1m linhas). Obviamente, a mensagem pode ser pequena ou grande e provavelmente não será consultada.

O que eu quero saber, há um impacto de desempenho para minhas colunas Name e Source sendo definidas como nvarchar(max)quando eu nunca espero que elas tenham mais de 150 caracteres?

sql-server sql-server-2008-r2
  • 4 respostas
  • 76122 Views
Martin Hope
Tom Marthenal
Asked: 2013-03-18 10:43:40 +0800 CST

Ordenando registros arbitrariamente em uma tabela

  • 33

Uma necessidade comum ao usar um banco de dados é acessar os registros em ordem. Por exemplo, se eu tiver um blog, quero poder reordenar minhas postagens em ordem arbitrária. Essas entradas geralmente têm muitos relacionamentos, portanto, um banco de dados relacional parece fazer sentido.

A solução comum que vi é adicionar uma coluna inteira order:

CREATE TABLE AS your_table (id, title, sort_order)
AS VALUES
  (0, 'Lorem ipsum',   3),
  (1, 'Dolor sit',     2),
  (2, 'Amet, consect', 0),
  (3, 'Elit fusce',    1);

Em seguida, podemos classificar as linhas orderpara colocá-las na ordem correta.

No entanto, isso parece desajeitado:

  • Se eu quiser mover o registro 0 para o início, tenho que reordenar todos os registros
  • Se eu quiser inserir um novo registro no meio, tenho que reordenar todos os registros depois dele
  • Se eu quiser remover um registro, tenho que reordenar todos os registros depois dele

É fácil imaginar situações como:

  • Dois registros têm o mesmoorder
  • Existem lacunas orderentre os registros

Isso pode acontecer facilmente por vários motivos.

Esta é a abordagem adotada por aplicativos como o Joomla:

Exemplo da abordagem do Joomla para ordenação

Você poderia argumentar que a interface aqui é ruim e que, em vez de humanos editarem números diretamente, eles deveriam usar setas ou arrastar e soltar - e provavelmente você estaria certo. Mas nos bastidores, a mesma coisa está acontecendo.

Algumas pessoas propuseram o uso de um decimal para armazenar a ordem, para que você possa usar "2,5" para inserir um registro entre os registros nas ordens 2 e 3. E embora isso ajude um pouco, é sem dúvida ainda mais confuso porque você pode acabar com decimais estranhos (onde você para? 2,75? 2,875? 2,8125?)

Existe uma maneira melhor de armazenar pedidos em uma tabela?

database-design relational-theory
  • 6 respostas
  • 10517 Views
Martin Hope
Hannah Vernon
Asked: 2013-03-14 09:25:47 +0800 CST

Manipulando o acesso simultâneo a uma tabela de chaves sem deadlocks no SQL Server

  • 33

Eu tenho uma tabela que é usada por um aplicativo legado como substituto de IDENTITYcampos em várias outras tabelas.

Cada linha na tabela armazena o último ID usado LastIDpara o campo nomeado em IDName.

Ocasionalmente, o proc armazenado obtém um impasse - acredito que construí um manipulador de erros apropriado; no entanto, estou interessado em ver se esta metodologia funciona como eu acho que funciona, ou se estou latindo para a árvore errada aqui.

Estou bastante certo de que deve haver uma maneira de acessar esta tabela sem nenhum impasse.

O próprio banco de dados é configurado com READ_COMMITTED_SNAPSHOT = 1.

Primeiro, aqui está a tabela:

CREATE TABLE [dbo].[tblIDs](
    [IDListID] [int] NOT NULL 
        CONSTRAINT PK_tblIDs 
        PRIMARY KEY CLUSTERED 
        IDENTITY(1,1) ,
    [IDName] [nvarchar](255) NULL,
    [LastID] [int] NULL,
);

E o índice não clusterizado no IDNamecampo:

CREATE NONCLUSTERED INDEX [IX_tblIDs_IDName] 
ON [dbo].[tblIDs]
(
    [IDName] ASC
) 
WITH (
    PAD_INDEX = OFF
    , STATISTICS_NORECOMPUTE = OFF
    , SORT_IN_TEMPDB = OFF
    , DROP_EXISTING = OFF
    , ONLINE = OFF
    , ALLOW_ROW_LOCKS = ON
    , ALLOW_PAGE_LOCKS = ON
    , FILLFACTOR = 80
);

GO

Alguns dados de exemplo:

INSERT INTO tblIDs (IDName, LastID) 
    VALUES ('SomeTestID', 1);
INSERT INTO tblIDs (IDName, LastID) 
    VALUES ('SomeOtherTestID', 1);
GO

O procedimento armazenado usado para atualizar os valores armazenados na tabela e retornar o próximo ID:

CREATE PROCEDURE [dbo].[GetNextID](
    @IDName nvarchar(255)
)
AS
BEGIN
    /*
        Description:    Increments and returns the LastID value from tblIDs
        for a given IDName
        Author:         Hannah Vernon
        Date:           2012-07-19
    */

    DECLARE @Retry int;
    DECLARE @EN int, @ES int, @ET int;
    SET @Retry = 5;
    DECLARE @NewID int;
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    SET NOCOUNT ON;
    WHILE @Retry > 0
    BEGIN
        BEGIN TRY
            BEGIN TRANSACTION;
            SET @NewID = COALESCE((SELECT LastID 
                FROM tblIDs 
                WHERE IDName = @IDName),0)+1;
            IF (SELECT COUNT(IDName) 
                FROM tblIDs 
                WHERE IDName = @IDName) = 0 
                    INSERT INTO tblIDs (IDName, LastID) 
                    VALUES (@IDName, @NewID)
            ELSE
                UPDATE tblIDs 
                SET LastID = @NewID 
                WHERE IDName = @IDName;
            COMMIT TRANSACTION;
            SET @Retry = -2; /* no need to retry since the operation completed */
        END TRY
        BEGIN CATCH
            IF (ERROR_NUMBER() = 1205) /* DEADLOCK */
                SET @Retry = @Retry - 1;
            ELSE
                BEGIN
                SET @Retry = -1;
                SET @EN = ERROR_NUMBER();
                SET @ES = ERROR_SEVERITY();
                SET @ET = ERROR_STATE()
                RAISERROR (@EN,@ES,@ET);
                END
            ROLLBACK TRANSACTION;
        END CATCH
    END
    IF @Retry = 0 /* must have deadlock'd 5 times. */
    BEGIN
        SET @EN = 1205;
        SET @ES = 13;
        SET @ET = 1
        RAISERROR (@EN,@ES,@ET);
    END
    ELSE
        SELECT @NewID AS NewID;
END
GO

Exemplos de execuções do proc armazenado:

EXEC GetNextID 'SomeTestID';

NewID
2

EXEC GetNextID 'SomeTestID';

NewID
3

EXEC GetNextID 'SomeOtherTestID';

NewID
2

EDITAR:

Adicionei um novo índice, pois o índice existente IX_tblIDs_Name não está sendo usado pelo SP; Suponho que o processador de consulta esteja usando o índice clusterizado, pois precisa do valor armazenado em LastID. De qualquer forma, este índice é usado pelo plano de execução real:

CREATE NONCLUSTERED INDEX IX_tblIDs_IDName_LastID 
ON dbo.tblIDs
(
    IDName ASC
) 
INCLUDE
(
    LastID
)
WITH (FILLFACTOR = 100
    , ONLINE=ON
    , ALLOW_ROW_LOCKS = ON
    , ALLOW_PAGE_LOCKS = ON);

EDIÇÃO #2:

Eu segui o conselho que @AaronBertrand deu e modifiquei um pouco. A ideia geral aqui é refinar a declaração para eliminar bloqueios desnecessários e, em geral, tornar o SP mais eficiente.

O código abaixo substitui o código acima de BEGIN TRANSACTIONto END TRANSACTION:

BEGIN TRANSACTION;
SET @NewID = COALESCE((SELECT LastID 
        FROM dbo.tblIDs 
        WHERE IDName = @IDName), 0) + 1;

IF @NewID = 1
    INSERT INTO tblIDs (IDName, LastID) 
    VALUES (@IDName, @NewID);
ELSE
    UPDATE dbo.tblIDs 
    SET LastID = @NewID 
    WHERE IDName = @IDName;

COMMIT TRANSACTION;

Como nosso código nunca adiciona um registro a esta tabela com 0 LastID, podemos supor que, se @NewID for 1, a intenção é anexar um novo ID à lista, caso contrário, estamos atualizando uma linha existente na lista.

sql-server deadlock
  • 5 respostas
  • 32848 Views
Martin Hope
Peter Groves
Asked: 2012-12-10 09:42:11 +0800 CST

Como faço para listar todas as tabelas em todos os esquemas de propriedade do usuário atual no Postgresql?

  • 33

Posso listar todas as tabelas em todos os esquemas usando

> \dt *.*

mas isso também lista as tabelas do sistema que superam em muito as minhas tabelas com as quais me importo. Eu gostaria de todas as tabelas (e possivelmente exibições) criadas por mim no esquema público e todos os esquemas que eu defini.

Espero encontrar uma maneira de fazer isso sem precisar adicionar esquemas explicitamente ao caminho de pesquisa à medida que os crio conforme descrito aqui:

https://stackoverflow.com/a/12902069

EDITAR:

Com base na resposta aceita, criei a seguinte exibição:

create view my_tables as 
select table_catalog, table_schema, table_name, table_type 
from information_schema.tables 
where table_schema not in ('pg_catalog', 'information_schema');

E agora o seguinte comando me dá o que eu queria:

select * from my_tables;
postgresql postgresql-9.1
  • 3 respostas
  • 78426 Views
Martin Hope
Philᵀᴹ
Asked: 2012-04-24 01:47:57 +0800 CST

Como um DBA, como eu faria a transição do Oracle para o SQL Server?

  • 33

Sou um DBA Oracle que também possui experiência em Sybase.

Quais são as principais diferenças arquitetônicas e conceituais entre as duas plataformas RDBMS?

Uma resposta semelhante à pergunta SQL Server->Oracle aqui seria mais útil.

sql-server oracle
  • 2 respostas
  • 5908 Views
Martin Hope
Tom Hunter
Asked: 2011-12-22 17:27:09 +0800 CST

Usando EXCEPT em uma expressão de tabela comum recursiva

  • 33

Por que a consulta a seguir retorna linhas infinitas? Eu esperava que a EXCEPTcláusula encerrasse a recursão.

with cte as (
    select *
    from (
        values(1),(2),(3),(4),(5)
    ) v (a)
)
,r as (
    select a
    from cte
    where a in (1,2,3)
    union all
    select a
    from (
        select a
        from cte
        except
        select a
        from r
    ) x
)
select a
from r

Me deparei com isso enquanto tentava responder a uma pergunta no Stack Overflow.

sql-server sql-server-2008
  • 2 respostas
  • 10857 Views
Martin Hope
Lazer
Asked: 2011-01-10 01:34:53 +0800 CST

Como funciona a tabela Oracle DUAL?

  • 33
SQL> desc dual
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DUMMY                                              VARCHAR2(1)

SQL> select 4*5 from dual;

       4*5
----------
        20

SQL>

Eu acho realmente estranho. Se não houver uma coluna chamada 4*5 em dual, como funciona a instrução select?

Além disso, por que não vejo o mesmo comportamento quando crio minha própria tabela dupla?

SQL> create table dual2(dummy varchar2(1)); 

Table created.

SQL> desc dual2
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DUMMY                                              VARCHAR2(1)

SQL> select 4*5 from dual2;

no rows selected

SQL> 
oracle
  • 9 respostas
  • 61024 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