O Amazon Aurora DSQL é fornecido como um serviço de pré-visualização. Para saber mais, consulte Betas e visualizações prévias
As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Subconjuntos de comandos SQL compatíveis no Aurora DSQL
O Aurora DSQL não é compatível com toda a sintaxe do SQL PostgreSQL compatível. Por exemplo, CREATE TABLE
no PostgreSQL há um grande número de cláusulas e parâmetros que o Aurora DSQL não suporta. Esta seção descreve a sintaxe da sintaxe do PostgreSQL que o Aurora DSQL oferece suporte para esses comandos.
CRIAR TABELA
CREATE TABLE
define uma nova tabela.
CREATE TABLE [ IF NOT EXISTS ] table_name ( [ { column_name data_type [ column_constraint [ ... ] ] | table_constraint | LIKE source_table [ like_option ... ] } [, ... ] ] ) where column_constraint is: [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression )| DEFAULT default_expr | GENERATED ALWAYS AS ( generation_expr ) STORED | UNIQUE [ NULLS [ NOT ] DISTINCT ] index_parameters | PRIMARY KEY index_parameters | and table_constraint is: [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters | and like_option is: { INCLUDING | EXCLUDING } { COMMENTS | CONSTRAINTS | DEFAULTS | GENERATED | IDENTITY | INDEXES | STATISTICS | ALL } index_parameters in UNIQUE, and PRIMARY KEY constraints are: [ INCLUDE ( column_name [, ... ] ) ]
ALTER TABLE
ALTER TABLE
altera a definição de uma tabela.
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] action [, ... ] ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME [ COLUMN ] column_name TO new_column_name ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ] RENAME CONSTRAINT constraint_name TO new_constraint_name ALTER TABLE [ IF EXISTS ] name RENAME TO new_name ALTER TABLE [ IF EXISTS ] name SET SCHEMA new_schema where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }
CREATE VIEW
CREATE VIEW
define uma nova visão persistente. O Aurora DSQL não oferece suporte a visualizações temporárias; somente visualizações permanentes são suportadas.
Sintaxe compatível
CREATE [ OR REPLACE ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ] [ WITH ( view_option_name [= view_option_value] [, ... ] ) ] AS query [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]
Descrição
CREATE VIEW
define a visualização de uma consulta. A visão não está materializada fisicamente. Em vez disso, a consulta é executada sempre que a visualização é referenciada em uma consulta.
CREATE or REPLACE VIEW
é semelhante, mas se uma exibição com o mesmo nome já existir, ela será substituída. A nova consulta deve gerar as mesmas colunas que foram geradas pela consulta de visualização existente (ou seja, os mesmos nomes de coluna na mesma ordem e com os mesmos tipos de dados), mas pode adicionar colunas adicionais ao final da lista. Os cálculos que dão origem às colunas de saída podem ser diferentes.
Se um nome de esquema for fornecido, comoCREATE VIEW myschema.myview ...
), a visualização será criada no esquema especificado. Caso contrário, ele será criado no esquema atual.
O nome da exibição deve ser diferente do nome de qualquer outra relação (tabela, índice, exibição) no mesmo esquema.
Parâmetros
CREATE VIEW
suporta vários parâmetros para controlar o comportamento de visualizações atualizáveis automaticamente.
RECURSIVE
-
Cria uma visualização recursiva. A sintaxe:
CREATE RECURSIVE VIEW [ schema . ] view_name (column_names) AS SELECT ...;
é equivalente a.CREATE VIEW [ schema . ] view_name AS WITH RECURSIVE view_name (column_names) AS (SELECT ...) SELECT column_names FROM view_name;
Uma lista de nomes de colunas de visualização deve ser especificada para uma exibição recursiva.
name
-
O nome da exibição a ser criada, que pode ser opcionalmente qualificada pelo esquema. Uma lista de nomes de colunas deve ser especificada para uma exibição recursiva.
column_name
-
Uma lista opcional de nomes a serem usados nas colunas da exibição. Se não forem fornecidos, os nomes das colunas serão deduzidos da consulta.
WITH ( view_option_name [= view_option_value] [, ... ] )
-
Essa cláusula especifica parâmetros opcionais para uma exibição; os seguintes parâmetros são suportados.
-
check_option (enum)
— Esse parâmetro pode serlocal
oucascaded
, e é equivalente a especificarWITH [ CASCADED | LOCAL ] CHECK OPTION
. -
security_barrier (boolean)
—Isso deve ser usado se a exibição for destinada a fornecer segurança em nível de linha. Atualmente, o Aurora DSQL não oferece suporte à segurança em nível de linha, mas essa opção ainda forçará queWHERE
as condições da visualização (e quaisquer condições usando operadores marcados comoLEAKPROOF
) sejam avaliadas primeiro. -
security_invoker (boolean)
—Essa opção faz com que as relações básicas subjacentes sejam verificadas em relação aos privilégios do usuário da exibição e não do proprietário da visualização. Veja as notas abaixo para obter detalhes completos.
Todas as opções acima podem ser alteradas nas visualizações existentes usando
ALTER VIEW
. -
query
-
Um
VALUES
comandoSELECT
or que fornecerá as colunas e linhas da exibição.-
WITH [ CASCADED | LOCAL ] CHECK OPTION
— Essa opção controla o comportamento das visualizações atualizáveis automaticamente. Quando essa opção for especificada,INSERT
osUPDATE
comandos na exibição serão verificados para garantir que as novas linhas satisfaçam a condição de definição da exibição (ou seja, as novas linhas são verificadas para garantir que sejam visíveis na exibição). Se não estiverem, a atualização será rejeitada. Se o nãoCHECK OPTION
for especificado,INSERT
osUPDATE
comandos na exibição poderão criar linhas que não são visíveis na exibição. As seguintes opções de verificação são suportadas. -
LOCAL
—As novas linhas só são verificadas em relação às condições definidas diretamente na própria exibição. Quaisquer condições definidas nas visualizações básicas subjacentes não são verificadas (a menos que também especifiquem aCHECK OPTION
). -
CASCADED
—As novas linhas são verificadas em relação às condições da visualização e de todas as visualizações base subjacentes. Se oCHECK OPTION
for especificado eLOCAL
nemCASCADED
for especificado, então seráCASCADED
assumido.
nota
O não
CHECK OPTION
pode ser usado comRECURSIVE
visualizações. O sóCHECK OPTION
é suportado em exibições que são atualizáveis automaticamente. -
Observações
Use a DROP VIEW
declaração para excluir visualizações. Os nomes e tipos de dados das colunas da exibição devem ser cuidadosamente considerados.
Por exemplo, não CREATE VIEW vista AS SELECT 'Hello World';
é recomendado porque o nome padrão da coluna é. ?column?;
Além disso, o tipo de dados da coluna é padronizadotext
, o que pode não ser o que você queria.
Uma abordagem melhor é especificar explicitamente o nome da coluna e o tipo de dados, tal como:CREATE VIEW vista AS SELECT text 'Hello World' AS hello;
.
Por padrão, o acesso às relações básicas subjacentes referenciadas na exibição é determinado pelas permissões do proprietário da visualização. Em alguns casos, isso pode ser usado para fornecer acesso seguro, mas restrito, às tabelas subjacentes. No entanto, nem todas as visualizações estão protegidas contra adulteração.
-
Se a exibição tiver a
security_invoker
propriedade definida como verdadeira, o acesso às relações básicas subjacentes será determinado pelas permissões do usuário que está executando a consulta, e não pelo proprietário da visualização. Portanto, o usuário de uma visualização do Security Invocer deve ter as permissões relevantes sobre a exibição e suas relações básicas subjacentes. -
Se alguma das relações básicas subjacentes for uma visão do invocador de segurança, ela será tratada como se tivesse sido acessada diretamente da consulta original. Assim, uma visualização do invocador de segurança sempre verificará suas relações básicas subjacentes usando as permissões do usuário atual, mesmo que seja acessada de uma visualização sem a
security_invoker
propriedade. -
As funções chamadas na exibição são tratadas da mesma forma como se tivessem sido chamadas diretamente da consulta usando a visualização. Portanto, o usuário de uma exibição deve ter permissões para chamar todas as funções usadas pela exibição. As funções na exibição são executadas com os privilégios do usuário que está executando a consulta ou do proprietário da função, dependendo se as funções estão definidas como
SECURITY INVOKER
ou.SECURITY DEFINER
Por exemplo, chamarCURRENT_USER
diretamente em uma visualização sempre retornará o usuário invocador, não o proprietário da visualização. Isso não é afetado pelasecurity_invoker
configuração da visualização e, portanto, uma visualizaçãosecurity_invoker
definida como false não é equivalente a umaSECURITY DEFINER
função. -
O usuário que está criando ou substituindo uma visualização deve ter
USAGE
privilégios em todos os esquemas mencionados na consulta de visualização para pesquisar os objetos referenciados nesses esquemas. Observe, no entanto, que essa pesquisa só acontece quando a exibição é criada ou substituída. Portanto, o usuário da exibição requer apenas oUSAGE
privilégio no esquema que contém a exibição, não nos esquemas mencionados na consulta de visualização, mesmo para uma visualização de invocador de segurança. -
Quando
CREATE OR REPLACE VIEW
é usado em uma exibição existente, somente aSELECT
regra de definição da exibição, mais quaisquerWITH ( ... )
parâmetros e seus,CHECK OPTION
são alterados. Outras propriedades de exibição, incluindo propriedade, permissões e regras não selecionadas, permanecem inalteradas. Você deve possuir a visualização para substituí-la (isso inclui ser membro da função proprietária).
Visualizações atualizáveis
As visualizações simples são atualizáveis automaticamente: o sistema permitirá que DELETE
as instruções INSERT
UPDATE
, e sejam usadas na exibição da mesma forma que em uma tabela normal. Uma exibição é automaticamente atualizável se satisfizer todas as seguintes condições:
-
A exibição deve ter exatamente uma entrada em sua
FROM
lista, que deve ser uma tabela ou outra exibição atualizável. -
A definição da exibição não deve conter
WITH
DISTINCT
,GROUP BY
,,HAVING
LIMIT
, ouOFFSET
cláusulas no nível superior. -
A definição da exibição não deve conter operações de conjunto (
UNION
INTERSECT
, ouEXCEPT
) no nível superior. -
A lista de seleção da exibição não deve conter agregados, funções de janela ou funções de retorno de conjuntos.
Uma exibição atualizável automaticamente pode conter uma combinação de colunas atualizáveis e não atualizáveis. Uma coluna é atualizável se for uma referência simples a uma coluna atualizável da relação base subjacente. Caso contrário, a coluna será somente para leitura e ocorrerá um erro se uma UPDATE
instrução INSERT
ou tentar atribuir um valor a ela.
Para visualizações atualizáveis automaticamente, o sistema converte qualquer INSERT
DELETE
instrução ou na visualização na declaração correspondente na relação base subjacente. UPDATE
INSERT
declarações com uma ON CONFLICT UPDATE
cláusula são totalmente suportadas.
Se uma exibição atualizável automaticamente contiver uma WHERE
condição, a condição restringe quais linhas da relação base estão disponíveis para modificação UPDATE
e DELETE
instruções na exibição. No entanto, um UPDATE
pode alterar uma linha para que ela não satisfaça mais a WHERE
condição, tornando-a invisível na visualização. Da mesma forma, um INSERT
comando pode potencialmente inserir linhas de relação básica que não satisfazem a WHERE
condição, tornando-as invisíveis na exibição. ON CONFLICT UPDATE
pode afetar da mesma forma uma linha existente não visível na exibição.
Você pode usar o CHECK OPTION
para evitar que UPDATE
os comandos INSERT
e criem linhas que não são visíveis na exibição.
Se uma exibição atualizável automaticamente for marcada com a propriedade security_barrier, todas as WHERE
condições da exibição (e quaisquer condições usando operadores marcados comoLEAKPROOF
) serão sempre avaliadas antes de qualquer condição que um usuário da exibição tenha adicionado. Observe que, devido a isso, as linhas que não são retornadas (porque não atendem WHERE
às condições do usuário) ainda podem acabar sendo bloqueadas. Você pode usar EXPLAIN
para ver quais condições são aplicadas no nível da relação (e, portanto, não bloqueiam linhas) e quais não são.
Por padrão, uma exibição mais complexa que não satisfaça todas essas condições é somente para leitura: o sistema não permite a inserção, atualização ou exclusão na exibição.
nota
O usuário que executa a inserção, atualização ou exclusão na exibição deve ter o privilégio correspondente de inserção, atualização ou exclusão na exibição. Por padrão, o proprietário da visualização deve ter os privilégios relevantes nas relações básicas subjacentes, enquanto o usuário que executa a atualização não precisa de nenhuma permissão nas relações básicas subjacentes. No entanto, se a exibição tiver security_invoker definido como true, o usuário que executa a atualização, em vez do proprietário da visualização, deverá ter os privilégios relevantes nas relações básicas subjacentes.
Exemplos
Para criar uma visão que consiste em todos os filmes de comédia.
CREATE VIEW comedies AS SELECT * FROM films WHERE kind = 'Comedy';
Isso criará uma exibição contendo as colunas que estão na film
tabela no momento da criação da visualização. Embora tenha *
sido usada para criar a exibição, as colunas adicionadas posteriormente à tabela não farão parte da exibição.
Crie uma visualização comLOCAL CHECK OPTION
.
CREATE VIEW pg_comedies AS SELECT * FROM comedies WHERE classification = 'PG' WITH CASCADED CHECK OPTION;
Isso criará uma visualização que verifica as linhas kind
e classification
as novas.
Crie uma exibição com uma combinação de colunas atualizáveis e não atualizáveis.
CREATE VIEW comedies AS SELECT f.*, country_code_to_name(f.country_code) AS country, (SELECT avg(r.rating) FROM user_ratings r WHERE r.film_id = f.id) AS avg_rating FROM films f WHERE f.kind = 'Comedy';
Essa visão apoiará INSERT
UPDATE
, DELETE
e. Todas as colunas da tabela de filmes serão atualizáveis, enquanto as colunas country
computadas avg_rating
serão somente para leitura.
CREATE RECURSIVE VIEW public.nums_1_100 (n) AS VALUES (1) UNION ALL SELECT n+1 FROM nums_1_100 WHERE n < 100;
nota
Embora o nome da visualização recursiva seja qualificado pelo esquemaCREATE
, sua autorreferência interna não é qualificada pelo esquema. Isso ocorre porque o nome da Expressão de Tabela Comum (CTE) criada implicitamente não pode ser qualificado pelo esquema.
Compatibilidade
CREATE OR REPLACE VIEW
é uma extensão da linguagem PostgreSQL. A WITH ( ... )
cláusula também é uma extensão, assim como as visualizações da barreira de segurança e as visualizações do invocador de segurança. O Aurora DSQL é compatível com essas extensões de linguagem.
ALTER VIEW
A ALTER VIEW
instrução permite alterar várias propriedades de uma visualização existente, e o Aurora DSQL é compatível com toda a sintaxe do PostgreSQL para esse comando.
Sintaxe compatível
ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER VIEW [ IF EXISTS ] name ALTER [ COLUMN ] column_name DROP DEFAULT ALTER VIEW [ IF EXISTS ] name OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } ALTER VIEW [ IF EXISTS ] name RENAME [ COLUMN ] column_name TO new_column_name ALTER VIEW [ IF EXISTS ] name RENAME TO new_name ALTER VIEW [ IF EXISTS ] name SET SCHEMA new_schema ALTER VIEW [ IF EXISTS ] name SET ( view_option_name [= view_option_value] [, ... ] ) ALTER VIEW [ IF EXISTS ] name RESET ( view_option_name [, ... ] )
Descrição
ALTER VIEW
altera várias propriedades auxiliares de uma vista. (Se você quiser modificar a consulta de definição da visualização, useCREATE OR REPLACE VIEW
.) Você deve possuir a visualização para usá-laALTER VIEW
. Para alterar o esquema de uma visualização, você também deve ter CREATE
privilégios no novo esquema. Para alterar o proprietário, você deve poder acessar SET ROLE
a nova função proprietária, e essa função deve ter CREATE
privilégios no esquema da exibição. Essas restrições determinam que alterar o proprietário não faz nada que você não possa fazer ao descartar e recriar a vista.)
Parâmetros
Parâmetros do ALTER VIEW
name
-
O nome (opcionalmente qualificado pelo esquema) de uma exibição existente.
column_name
-
Novo nome para uma coluna existente.
IF EXISTS
-
Não gere um erro se a exibição não existir. Um aviso é emitido nesse caso.
SET/DROP DEFAULT
-
Esses formulários definem ou removem o valor padrão de uma coluna. O valor padrão de uma coluna de visualização é substituído por qualquer
UPDATE
comandoINSERT
ou cujo destino seja a visualização. O padrão da visualização, portanto, terá precedência sobre quaisquer valores padrão das relações subjacentes. - novo_proprietário
-
O nome de usuário do novo proprietário da exibição.
- new_name
-
O novo nome da exibição.
- novo_esquema
-
O novo esquema para a exibição.
- SET (view_option_name [= view_option_value] [,...])
- RESET (view_option_name [,...])
-
Define ou redefine uma opção de visualização. As opções atualmente suportadas estão abaixo.
-
check_option (enum)
—Altera a opção de verificação da exibição. O valor deve serlocal
oucascaded
. -
security_barrier (boolean)
—Altera a propriedade de barreira de segurança da exibição. O valor deve ser um valor booleano, comotrue
oufalse
. -
security_invoker (boolean)
—Altera a propriedade de barreira de segurança da exibição. O valor deve ser um valor booleano, comotrue
oufalse
.
-
Observações
Por motivos históricos de PG, também ALTER TABLE
pode ser usado com visualizações; mas as únicas variantes permitidas ALTER TABLE
com visualizações são equivalentes às mostradas anteriormente.
Exemplos
Renomeando a exibição foo
para. bar
ALTER VIEW foo RENAME TO bar;
Anexar um valor de coluna padrão a uma exibição atualizável.
CREATE TABLE base_table (id int, ts timestamptz); CREATE VIEW a_view AS SELECT * FROM base_table; ALTER VIEW a_view ALTER COLUMN ts SET DEFAULT now(); INSERT INTO base_table(id) VALUES(1); -- ts will receive a NULL INSERT INTO a_view(id) VALUES(2); -- ts will receive the current time
Compatibilidade
ALTER VIEW
é uma extensão PostgreSQL do padrão SQL compatível com o Aurora DSQL.
DROP VIEW
A DROP VIEW
declaração remove uma exibição existente. O Aurora DSQL é compatível com a sintaxe completa do PostgreSQL para esse comando.
Sintaxe compatível
DROP VIEW [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]
Descrição
DROP VIEW
descarta uma visualização existente. Para executar esse comando, você deve ser o proprietário da exibição.
Parâmetros
IF EXISTS
-
Não gere um erro se a exibição não existir. Um aviso é emitido nesse caso.
name
-
O nome (opcionalmente qualificado pelo esquema) da exibição a ser removida..
CASCADE
-
Descarte automaticamente objetos que dependem da visualização (como outras visualizações) e, por sua vez, todos os objetos que dependem desses objetos.
RESTRICT
-
Recuse-se a descartar a visualização se algum objeto depender dela. Esse é o padrão.
Exemplos
DROP VIEW kinds;
Compatibilidade
Esse comando está em conformidade com o padrão SQL, exceto que o padrão permite que apenas uma visualização seja eliminada por comando, além da IF EXISTS
opção, que é uma extensão do PostgreSQL compatível com o Aurora DSQL.