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>
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
eDEFAULT
, 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.
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: