Detalhes adicionais de restrições

Neste tópico:

Privilégios de segurança para restrições

Para criar restrições únicas ou de chave primária:

  • Ao alterar uma tabela existente para adicionar a restrição, a função atual para o usuário deve ter o privilégio OWNERSHIP para a tabela.

  • Ao criar uma nova tabela, a função atual para o usuário deve ter o privilégio CREATE TABLE para o esquema onde a tabela será criada.

Para criar restrições de chave estrangeira:

  • A função atual para o usuário deve ter o privilégio OWNERSHIP para a tabela de chaves estrangeiras.

  • A função atual para o usuário deve ter o privilégio REFERENCES para a tabela de chaves primárias/únicas.

O privilégio REFERENCES pode ser concedido e revogado de funções usando os comandos GRANT <privilégios> e REVOKE <privilégios>:

GRANT REFERENCES ON TABLE <pk_table_name> TO ROLE <role_name>

REVOKE REFERENCES ON TABLE <pk_table_name> FROM ROLE <role_name>
Copy

Comentários para restrições

Semelhante a outros objetos e construções de banco de dados, o Snowflake oferece suporte ao fornecimento de comentários para restrições. Os comentários podem ser acrescentados às restrições de duas maneiras:

  • A restrição fora de linha oferece suporte para a cláusula COMMENT, na qual um comentário pode ser especificado ao definir a restrição.

    Não são permitidos comentários ao definir restrições em linha porque os comentários podem causar ambiguidade.

  • Comentários também podem ser definidos para restrições usando o comando COMMENT:

    COMMENT [IF EXISTS] ON CONSTRAINT <constraint_name> IS '<comment_string>'
    
    Copy

Suporte a restrições em comandos Copy

O Snowflake oferece suporte à criação de cópias de tabelas usando CREATE TABLE:

  • Para criar uma cópia vazia, use CREATE TABLE … LIKE.

  • Para criar um clone, use CREATE TABLE … CLONE.

Além disso, cópias de tabelas são criadas automaticamente quando um esquema ou banco de dados é clonado.

Independentemente de como uma cópia é criada para uma tabela, as restrições da tabela original também são copiadas. Ao copiar uma chave estrangeira com uma tabela que faz referências (tabela de chave estrangeira) e uma tabela referenciada (tabela de chave primária), os seguintes cenários podem ocorrer:

  • Se ambas as tabelas forem copiadas no mesmo comando (como durante a clonagem de um esquema ou banco de dados), uma nova chave estrangeira é criada entre a nova tabela que faz referências e a tabela referenciada.

  • Se apenas a tabela que faz referências for copiada, então uma nova chave estrangeira é criada nessa tabela, que aponta para a tabela de chave primária original como a tabela referenciada.

  • Se apenas a tabela referenciada for copiada, nenhuma nova chave estrangeira é criada, embora as chaves primárias/únicas sejam copiadas.

Como resultado, se um usuário copia uma tabela que faz referências e uma tabela referenciada separadamente, ele deve criar manualmente uma nova chave estrangeira ou alterar manualmente a tabela de chave primária para a nova chave estrangeira.

Suporte a restrições em GET_DDL

O Snowflake oferece suporte a restrições para GET_DDL; entretanto, observe o seguinte:

  • Restrições de coluna única, como NOT NULL e DEFAULT, são reconstruídas em linha com a definição da coluna.

  • As restrições de tabela, como chaves únicas/primárias/estrangeiras, são sempre reconstruídas como restrições fora de linha, mesmo que consistam em uma única coluna.

  • Para restrições sem nome (ou seja, restrições com um nome gerado pelo sistema), o nome gerado pelo sistema não é retornado por GET_DDL.