Subconjuntos de comandos SQL compatíveis no Aurora DSQL - Amazon Aurora DSQL

O Amazon Aurora DSQL é fornecido como um serviço de pré-visualização. Para saber mais, consulte Betas e visualizações prévias nos Termos de AWS Serviço.

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 TABLEdefine 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 TABLEaltera 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 VIEWdefine 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 VIEWdefine 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 VIEWsuporta 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 ser local 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á que WHERE 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 usandoALTER VIEW.

query

Um VALUES comando SELECT 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 os UPDATE 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ão CHECK OPTION for especificado, INSERT os UPDATE 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 o CHECK OPTION for especificado e LOCAL nem CASCADED for especificado, então será CASCADED assumido.

nota

O não CHECK OPTION pode ser usado com RECURSIVE 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, chamar CURRENT_USER diretamente em uma visualização sempre retornará o usuário invocador, não o proprietário da visualização. Isso não é afetado pela security_invoker configuração da visualização e, portanto, uma visualização security_invoker definida como false não é equivalente a uma SECURITY 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 o USAGE 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 a SELECT regra de definição da exibição, mais quaisquer WITH ( ... ) 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 INSERTUPDATE, 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 WITHDISTINCT,GROUP BY,, HAVINGLIMIT, ou OFFSET cláusulas no nível superior.

  • A definição da exibição não deve conter operações de conjunto (UNIONINTERSECT, 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 INSERTdeclaraçõ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 UPDATEpode 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á INSERTUPDATE, 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 VIEWaltera 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 comando INSERT 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 ser local ou cascaded.

  • security_barrier (boolean)—Altera a propriedade de barreira de segurança da exibição. O valor deve ser um valor booleano, como true oufalse.

  • security_invoker (boolean)—Altera a propriedade de barreira de segurança da exibição. O valor deve ser um valor booleano, como true 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 VIEWdescarta 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.