feat: support pgsql code completion (#205)
* feat: pgsql: complete sql, upgrade syntax file and complete autoImprove * feat: pgsql: complete unit test * feat: pgsql: update unit test for autocomplete * feat(pgsql: update split's context type ): pgsql: update split's context type * feat(pgsql: update schema, table, procedure, tablespace, function, view,database's rule name): pgsql * feat: pgsql: update usualName's rule realize * feat: pgsql:update funcName's using --------- Co-authored-by: zhaoge <>
This commit is contained in:
31
test/parser/pgsql/suggestion/fixtures/syntaxSuggestion.sql
Normal file
31
test/parser/pgsql/suggestion/fixtures/syntaxSuggestion.sql
Normal file
@ -0,0 +1,31 @@
|
||||
CREATE TABLE db. ();
|
||||
|
||||
INSERT INTO db.tb ;
|
||||
|
||||
SELECT * FROM db. ;
|
||||
|
||||
ALTER TABLE db ;
|
||||
|
||||
CREATE OR REPLACE VIEW db.v;
|
||||
|
||||
ALTER VIEW db.v ;
|
||||
|
||||
DROP VIEW db. ;
|
||||
|
||||
CREATE FUNCTION fn1;
|
||||
|
||||
DROP FUNCTION fn1;
|
||||
|
||||
CREATE DATABASE db;
|
||||
|
||||
DROP DATABASE db ;
|
||||
|
||||
ALTER DATABASE db ;
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS schema_name;
|
||||
|
||||
DROP SCHEMA IF EXISTS sch;
|
||||
|
||||
ALTER SCHEMA name RENAME TO new_name;
|
||||
|
||||
|
12
test/parser/pgsql/suggestion/fixtures/tokenSuggestion.sql
Normal file
12
test/parser/pgsql/suggestion/fixtures/tokenSuggestion.sql
Normal file
@ -0,0 +1,12 @@
|
||||
DROP ;
|
||||
|
||||
ALTER ;
|
||||
|
||||
INSERT ;
|
||||
|
||||
DELETE ;
|
||||
|
||||
CREATE ;
|
||||
|
||||
|
||||
|
275
test/parser/pgsql/suggestion/syntaxSuggestion.test.ts
Normal file
275
test/parser/pgsql/suggestion/syntaxSuggestion.test.ts
Normal file
@ -0,0 +1,275 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { CaretPosition, SyntaxContextType } from '../../../../src/parser/common/basic-parser-types';
|
||||
import PgSQL from '../../../../src/parser/pgsql';
|
||||
import { commentOtherLine } from '../../../helper';
|
||||
|
||||
const syntaxSql = fs.readFileSync(
|
||||
path.join(__dirname, 'fixtures', 'syntaxSuggestion.sql'),
|
||||
'utf-8'
|
||||
);
|
||||
|
||||
describe('Postgre SQL Syntax Suggestion', () => {
|
||||
const parser = new PgSQL();
|
||||
|
||||
test('Validate Syntax SQL', () => {
|
||||
expect(parser.validate(syntaxSql).length).not.toBe(0);
|
||||
expect(parser.validate(syntaxSql).length).not.toBe(0);
|
||||
expect(parser.validate(syntaxSql).length).not.toBe(0);
|
||||
});
|
||||
|
||||
test('Insert table ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 3,
|
||||
column: 18,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.TABLE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.', 'tb']);
|
||||
});
|
||||
|
||||
test('Alter table ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 7,
|
||||
column: 15,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.TABLE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db']);
|
||||
});
|
||||
|
||||
test('Select table ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 5,
|
||||
column: 18,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.TABLE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.']);
|
||||
});
|
||||
|
||||
test('Create table ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 1,
|
||||
column: 17,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.TABLE_CREATE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.']);
|
||||
});
|
||||
|
||||
test('Create view ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 9,
|
||||
column: 28,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.VIEW_CREATE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.', 'v']);
|
||||
});
|
||||
|
||||
test('Drop view ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 13,
|
||||
column: 14,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.VIEW
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.']);
|
||||
});
|
||||
|
||||
test('Alter view ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 11,
|
||||
column: 16,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.VIEW
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db', '.', 'v']);
|
||||
});
|
||||
|
||||
test('Create function ', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 15,
|
||||
column: 20,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.FUNCTION_CREATE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['fn1']);
|
||||
});
|
||||
|
||||
test('Drop function', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 17,
|
||||
column: 18,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.FUNCTION
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['fn1']);
|
||||
});
|
||||
|
||||
test('Create database', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 19,
|
||||
column: 19,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.DATABASE_CREATE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db']);
|
||||
});
|
||||
|
||||
test('Drop database', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 21,
|
||||
column: 17,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.DATABASE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db']);
|
||||
});
|
||||
|
||||
test('Alter database', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 23,
|
||||
column: 18,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.DATABASE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['db']);
|
||||
});
|
||||
|
||||
test('Create schema', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 25,
|
||||
column: 40,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.DATABASE_CREATE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['schema_name']);
|
||||
});
|
||||
|
||||
test('Drop schema', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 27,
|
||||
column: 26,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.DATABASE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['sch']);
|
||||
});
|
||||
|
||||
test('Alter schema', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 29,
|
||||
column: 18,
|
||||
};
|
||||
const syntaxes = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(syntaxSql, pos.lineNumber),
|
||||
pos
|
||||
)?.syntax;
|
||||
const suggestion = syntaxes?.find(
|
||||
(syn) => syn.syntaxContextType === SyntaxContextType.DATABASE
|
||||
);
|
||||
|
||||
expect(suggestion).not.toBeUndefined();
|
||||
expect(suggestion?.wordRanges.map((token) => token.text)).toEqual(['name']);
|
||||
});
|
||||
});
|
193
test/parser/pgsql/suggestion/tokenSuggestion.test.ts
Normal file
193
test/parser/pgsql/suggestion/tokenSuggestion.test.ts
Normal file
@ -0,0 +1,193 @@
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { CaretPosition } from '../../../../src/parser/common/basic-parser-types';
|
||||
import PostgresSQL from '../../../../src/parser/pgsql';
|
||||
import { commentOtherLine } from '../../../helper';
|
||||
|
||||
const tokenSql = fs.readFileSync(path.join(__dirname, 'fixtures', 'tokenSuggestion.sql'), 'utf-8');
|
||||
|
||||
describe('Postgres SQL Token Suggestion', () => {
|
||||
const parser = new PostgresSQL();
|
||||
test('After ALTER', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 3,
|
||||
column: 7,
|
||||
};
|
||||
const suggestion = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(tokenSql, pos.lineNumber),
|
||||
pos
|
||||
)?.keywords;
|
||||
expect(suggestion).toEqual([
|
||||
'TYPE',
|
||||
'TEXT',
|
||||
'STATISTICS',
|
||||
'TABLESPACE',
|
||||
'USER',
|
||||
'ROLE',
|
||||
'EVENT',
|
||||
'TRIGGER',
|
||||
'RULE',
|
||||
'FOREIGN',
|
||||
'TABLE',
|
||||
'MATERIALIZED',
|
||||
'VIEW',
|
||||
'INDEX',
|
||||
'SEQUENCE',
|
||||
'SUBSCRIPTION',
|
||||
'SERVER',
|
||||
'SCHEMA',
|
||||
'ROUTINE',
|
||||
'PUBLICATION',
|
||||
'PROCEDURE',
|
||||
'POLICY',
|
||||
'OPERATOR',
|
||||
'LANGUAGE',
|
||||
'PROCEDURAL',
|
||||
'GROUP',
|
||||
'FUNCTION',
|
||||
'DOMAIN',
|
||||
'DATABASE',
|
||||
'CONVERSION',
|
||||
'COLLATION',
|
||||
'AGGREGATE',
|
||||
'SYSTEM',
|
||||
'LARGE',
|
||||
'EXTENSION',
|
||||
'DEFAULT',
|
||||
]);
|
||||
});
|
||||
|
||||
test('After CREATE', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 9,
|
||||
column: 8,
|
||||
};
|
||||
const suggestion = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(tokenSql, pos.lineNumber),
|
||||
pos
|
||||
)?.keywords;
|
||||
expect(suggestion).toEqual([
|
||||
'RECURSIVE',
|
||||
'VIEW',
|
||||
'TEMPORARY',
|
||||
'TEMP',
|
||||
'LOCAL',
|
||||
'GLOBAL',
|
||||
'UNLOGGED',
|
||||
'OR',
|
||||
'RULE',
|
||||
'INDEX',
|
||||
'UNIQUE',
|
||||
'TABLE',
|
||||
'COLLATION',
|
||||
'TEXT',
|
||||
'TYPE',
|
||||
'OPERATOR',
|
||||
'AGGREGATE',
|
||||
'DATABASE',
|
||||
'USER',
|
||||
'ROLE',
|
||||
'EVENT',
|
||||
'TRIGGER',
|
||||
'CONSTRAINT',
|
||||
'TRANSFORM',
|
||||
'TABLESPACE',
|
||||
'STATISTICS',
|
||||
'SUBSCRIPTION',
|
||||
'SEQUENCE',
|
||||
'SCHEMA',
|
||||
'LANGUAGE',
|
||||
'PROCEDURAL',
|
||||
'TRUSTED',
|
||||
'POLICY',
|
||||
'PUBLICATION',
|
||||
'MATERIALIZED',
|
||||
'GROUP',
|
||||
'PROCEDURE',
|
||||
'FUNCTION',
|
||||
'FOREIGN',
|
||||
'SERVER',
|
||||
'EXTENSION',
|
||||
'DOMAIN',
|
||||
'CONVERSION',
|
||||
'DEFAULT',
|
||||
'CAST',
|
||||
'ASSERTION',
|
||||
'ACCESS',
|
||||
]);
|
||||
});
|
||||
|
||||
test('After DELETE', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 7,
|
||||
column: 8,
|
||||
};
|
||||
const suggestion = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(tokenSql, pos.lineNumber),
|
||||
pos
|
||||
)?.keywords;
|
||||
expect(suggestion).toEqual(['FROM']);
|
||||
});
|
||||
|
||||
test('After DROP', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 1,
|
||||
column: 6,
|
||||
};
|
||||
const suggestion = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(tokenSql, pos.lineNumber),
|
||||
pos
|
||||
)?.keywords;
|
||||
expect(suggestion).toEqual([
|
||||
'OPERATOR',
|
||||
'ROUTINE',
|
||||
'PROCEDURE',
|
||||
'FUNCTION',
|
||||
'AGGREGATE',
|
||||
'DATABASE',
|
||||
'USER',
|
||||
'GROUP',
|
||||
'ROLE',
|
||||
'TRANSFORM',
|
||||
'TABLESPACE',
|
||||
'SUBSCRIPTION',
|
||||
'INDEX',
|
||||
'DOMAIN',
|
||||
'TYPE',
|
||||
'RULE',
|
||||
'TRIGGER',
|
||||
'POLICY',
|
||||
'SCHEMA',
|
||||
'ACCESS',
|
||||
'EVENT',
|
||||
'EXTENSION',
|
||||
'FOREIGN',
|
||||
'PROCEDURAL',
|
||||
'LANGUAGE',
|
||||
'PUBLICATION',
|
||||
'SERVER',
|
||||
'TABLE',
|
||||
'SEQUENCE',
|
||||
'VIEW',
|
||||
'MATERIALIZED',
|
||||
'COLLATION',
|
||||
'CONVERSION',
|
||||
'STATISTICS',
|
||||
'TEXT',
|
||||
'OWNED',
|
||||
'CAST',
|
||||
]);
|
||||
});
|
||||
|
||||
test('After INSERT', () => {
|
||||
const pos: CaretPosition = {
|
||||
lineNumber: 5,
|
||||
column: 8,
|
||||
};
|
||||
const suggestion = parser.getSuggestionAtCaretPosition(
|
||||
commentOtherLine(tokenSql, pos.lineNumber),
|
||||
pos
|
||||
)?.keywords;
|
||||
expect(suggestion).toEqual(['INTO']);
|
||||
});
|
||||
});
|
@ -58,11 +58,15 @@ ALTER CONVERSION name SET SCHEMA new_schema;
|
||||
ALTER DATABASE name WITH CONNECTION LIMIT connlimit;
|
||||
ALTER DATABASE name RENAME TO new_name;
|
||||
ALTER DATABASE name OWNER TO new_owner;
|
||||
ALTER DATABASE name OWNER TO CURRENT_ROLE;
|
||||
ALTER DATABASE name OWNER TO CURRENT_USER;
|
||||
ALTER DATABASE name OWNER TO SESSION_USER;
|
||||
ALTER DATABASE name SET TABLESPACE new_tablespace;
|
||||
ALTER DATABASE name SET configuration_parameter TO DEFAULT;
|
||||
ALTER DATABASE name SET configuration_parameter FROM CURRENT;
|
||||
ALTER DATABASE name RESET configuration_parameter;
|
||||
ALTER DATABASE name RESET ALL;
|
||||
ALTER DATABASE name;
|
||||
|
||||
-- ALTER DEFAULT PRIVILEGES
|
||||
ALTER DEFAULT PRIVILEGES
|
||||
@ -164,10 +168,20 @@ ALTER INDEX IF EXISTS name RENAME TO new_name;
|
||||
ALTER INDEX IF EXISTS name SET TABLESPACE tablespace_name;
|
||||
ALTER INDEX IF EXISTS name SET ( storage_parameter = value2 );
|
||||
ALTER INDEX IF EXISTS name RESET ( storage_parameter );
|
||||
ALTER INDEX name ATTACH PARTITION index_name;
|
||||
ALTER INDEX name NO DEPENDS ON EXTENSION extension_name;
|
||||
ALTER INDEX IF EXISTS name ALTER COLUMN column_number
|
||||
SET STATISTICS 5;
|
||||
ALTER INDEX ALL IN TABLESPACE name OWNED BY role_name,role_name2
|
||||
SET TABLESPACE new_tablespace NOWAIT;
|
||||
|
||||
|
||||
-- ALTER LANGUAGE
|
||||
ALTER PROCEDURAL LANGUAGE name RENAME TO new_name;
|
||||
ALTER LANGUAGE name OWNER TO new_owner;
|
||||
ALTER LANGUAGE name OWNER TO CURRENT_ROLE;
|
||||
ALTER LANGUAGE name OWNER TO CURRENT_USER;
|
||||
ALTER LANGUAGE name OWNER TO SESSION_USER;
|
||||
|
||||
-- ALTER LARGE OBJECT
|
||||
ALTER LARGE OBJECT 32423 OWNER TO new_owner;
|
||||
@ -191,6 +205,14 @@ ALTER OPERATOR = ( integer , NONE ) SET SCHEMA new_schema;
|
||||
ALTER OPERATOR CLASS name USING index_method RENAME TO new_name;
|
||||
ALTER OPERATOR CLASS name USING index_method OWNER TO new_owner;
|
||||
ALTER OPERATOR CLASS name USING index_method SET SCHEMA new_schema;
|
||||
ALTER OPERATOR FAMILY name USING index_method ADD
|
||||
OPERATOR 1 > ( int, int )
|
||||
FOR SEARCH,
|
||||
FUNCTION 24 ( int)
|
||||
function_name( int );
|
||||
|
||||
ALTER OPERATOR FAMILY name USING index_method DROP
|
||||
OPERATOR 32 ( op_typ ),FUNCTION 34 ( op_type);
|
||||
|
||||
-- ALTER OPERATOR FAMILY
|
||||
ALTER OPERATOR FAMILY name USING index_method ADD
|
||||
@ -203,6 +225,33 @@ ALTER OPERATOR FAMILY name USING index_method RENAME TO new_name;
|
||||
ALTER OPERATOR FAMILY name USING index_method OWNER TO new_owner;
|
||||
ALTER OPERATOR FAMILY name USING index_method SET SCHEMA new_schema;
|
||||
|
||||
-- ALTER POLICY
|
||||
ALTER POLICY name ON table_name RENAME TO new_name;
|
||||
ALTER POLICY name ON table_name
|
||||
TO role_name, PUBLIC, CURRENT_ROLE, CURRENT_USER, SESSION_USER
|
||||
USING ( using_expression )
|
||||
WITH CHECK ( check_expression );
|
||||
|
||||
-- ALTER PROCEDURE
|
||||
ALTER PROCEDURE name ( IN argname integer, IN argname int)
|
||||
RESET ALL RESTRICT;
|
||||
ALTER PROCEDURE name ( IN argname integer )
|
||||
RENAME TO new_name;
|
||||
ALTER PROCEDURE name ( IN argname integer)
|
||||
OWNER TO CURRENT_ROLE;
|
||||
ALTER PROCEDURE name ( IN argname integer)
|
||||
SET SCHEMA new_schema;
|
||||
ALTER PROCEDURE name ( IN argname integer)
|
||||
NO DEPENDS ON EXTENSION extension_name;
|
||||
|
||||
-- ALTER PUBLICATION
|
||||
ALTER PUBLICATION name ADD TABLE ONLY table_name * ( column_name,column_name2) WHERE ( expression>3 );
|
||||
ALTER PUBLICATION name SET TABLE ONLY table_name * ( column_name,column_name2) WHERE ( expression ), TABLE ONLY table_name * ( column_name,column_name2) WHERE ( expression );
|
||||
ALTER PUBLICATION name DROP TABLE ONLY table_name * ( column_name,column_name2) WHERE ( expression );
|
||||
ALTER PUBLICATION name SET ( publication_parameter = value, parameters2 )
|
||||
ALTER PUBLICATION name OWNER TO CURRENT_ROLE;
|
||||
ALTER PUBLICATION name RENAME TO new_name;
|
||||
|
||||
-- ALTER ROLE
|
||||
ALTER ROLE name WITH SUPERUSER CREATEDB CREATEROLE VALID UNTIL 'timestamp';
|
||||
ALTER ROLE name RENAME TO new_name;
|
||||
@ -211,6 +260,20 @@ ALTER ROLE name IN DATABASE database_name SET configuration_parameter FROM CURRE
|
||||
ALTER ROLE ALL IN DATABASE database_name RESET configuration_parameter;
|
||||
ALTER ROLE name IN DATABASE database_name RESET ALL;
|
||||
|
||||
-- ALTER ROUTINE
|
||||
ALTER ROUTINE name ( IN argname integer)
|
||||
COST execution_cost RESTRICT;
|
||||
ALTER ROUTINE name
|
||||
COST execution_cost IMMUTABLE LEAKPROOF SECURITY INVOKER ROWS result_rows SET configuration_parameter TO DEFAULT SET configuration_parameter FROM CURRENT RESET configuration_parameter RESET ALL;
|
||||
ALTER ROUTINE name ( IN argname integer)
|
||||
RENAME TO new_name;
|
||||
ALTER ROUTINE name ( IN argname integer)
|
||||
OWNER TO CURRENT_ROLE;
|
||||
ALTER ROUTINE name ( IN argname integer)
|
||||
SET SCHEMA new_schema;
|
||||
ALTER ROUTINE name ( IN argname integer)
|
||||
NO DEPENDS ON EXTENSION extension_name;
|
||||
|
||||
-- ALTER RULE
|
||||
ALTER RULE name ON table_name RENAME TO new_name;
|
||||
|
||||
@ -222,6 +285,7 @@ ALTER SCHEMA name OWNER TO new_owner;
|
||||
ALTER SEQUENCE IF EXISTS name INCREMENT BY 324
|
||||
MINVALUE 34 MAXVALUE 66
|
||||
START WITH 12 RESTART WITH 34
|
||||
RESTART WITH restart
|
||||
CACHE 324 NO CYCLE
|
||||
OWNED BY table_name.column_name;
|
||||
ALTER SEQUENCE name OWNER TO new_owner;
|
||||
@ -233,18 +297,52 @@ ALTER SERVER name VERSION 'new_version' OPTIONS ( ADD option 'value', SET option
|
||||
ALTER SERVER name OWNER TO new_owner;
|
||||
ALTER SERVER name RENAME TO new_name;
|
||||
|
||||
-- ALTER STATISTICS
|
||||
ALTER STATISTICS name OWNER TO CURRENT_ROLE;
|
||||
ALTER STATISTICS name OWNER TO CURRENT_USER;
|
||||
ALTER STATISTICS name OWNER TO SESSION_USER;
|
||||
ALTER STATISTICS name RENAME TO new_name;
|
||||
ALTER STATISTICS name SET SCHEMA new_schema;
|
||||
ALTER STATISTICS name SET STATISTICS 23;
|
||||
|
||||
-- ALTER SUBSCRIPTION
|
||||
ALTER SUBSCRIPTION name CONNECTION 'conninfo';
|
||||
ALTER SUBSCRIPTION name SET PUBLICATION publication_name,publication_name1 WITH ( publication_option = value) ;
|
||||
ALTER SUBSCRIPTION name ADD PUBLICATION publication_name WITH ( publication_option );
|
||||
ALTER SUBSCRIPTION name DROP PUBLICATION publication_name WITH ( publication_option);
|
||||
ALTER SUBSCRIPTION name REFRESH PUBLICATION WITH ( refresh_option = value);
|
||||
ALTER SUBSCRIPTION name ENABLE;
|
||||
ALTER SUBSCRIPTION name DISABLE;
|
||||
ALTER SUBSCRIPTION name SET ( subscription_parameter = value);
|
||||
ALTER SUBSCRIPTION name SKIP ( skip_option = value );
|
||||
ALTER SUBSCRIPTION name OWNER TO CURRENT_ROLE;
|
||||
ALTER SUBSCRIPTION name RENAME TO new_name;
|
||||
|
||||
-- ALTER SYSTEM
|
||||
ALTER SYSTEM SET configuration_parameter TO DEFAULT;
|
||||
ALTER SYSTEM RESET configuration_parameter;
|
||||
ALTER SYSTEM RESET ALL;
|
||||
|
||||
-- ALTER TABLE
|
||||
ALTER TABLE IF EXISTS ONLY name *
|
||||
ALTER COLUMN column_name SET DEFAULT expression, DISABLE RULE rewrite_rule_name, ADD CONSTRAINT constraint_name
|
||||
UNIQUE USING INDEX index_name DEFERRABLE INITIALLY DEFERRED;
|
||||
ALTER TABLE name
|
||||
RENAME column_name TO new_column_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 name
|
||||
SET SCHEMA new_schema;
|
||||
ALTER TABLE ALL IN TABLESPACE name OWNED BY role_name,role_name2
|
||||
SET TABLESPACE new_tablespace NOWAIT;
|
||||
ALTER TABLE IF EXISTS name
|
||||
ATTACH PARTITION partition_name FOR VALUES FROM (MINVALUE, x>3) TO (MAXVALUE,MAXVALUE);
|
||||
ALTER TABLE orders
|
||||
ATTACH PARTITION orders_p4 FOR VALUES WITH (MODULUS 4, REMAINDER 4);
|
||||
ALTER TABLE IF EXISTS name
|
||||
DETACH PARTITION partition_name CONCURRENTLY;
|
||||
|
||||
-- ALTER TABLESPACE
|
||||
ALTER TABLESPACE name RENAME TO new_name;
|
||||
@ -312,3 +410,4 @@ ALTER VIEW name SET SCHEMA new_schema;
|
||||
ALTER VIEW IF EXISTS name SET ( view_option_name = view_option_value, view_option_name2 = view_option_value2);
|
||||
ALTER VIEW name RESET ( view_option_name, view_option_name );
|
||||
|
||||
|
||||
|
@ -156,6 +156,11 @@ CREATE TYPE floatrange AS RANGE (
|
||||
subtype_diff = float8mi
|
||||
);
|
||||
|
||||
-- CREATE ACCESS METHOD
|
||||
CREATE ACCESS METHOD name
|
||||
TYPE TABLE
|
||||
HANDLER handler_function;
|
||||
|
||||
-- CREATE AGGREGATE
|
||||
CREATE AGGREGATE agg_name1 ( int, integer) (
|
||||
SFUNC = sfunc,
|
||||
@ -203,7 +208,11 @@ CREATE CAST (source_type3 AS target_type3)
|
||||
CREATE COLLATION coll_name (
|
||||
LOCALE = locale,
|
||||
LC_COLLATE = lc_collate,
|
||||
LC_CTYPE = lc_ctype
|
||||
LC_CTYPE = lc_ctype,
|
||||
PROVIDER = provider,
|
||||
DETERMINISTIC = boolean,
|
||||
RULES = rules,
|
||||
VERSION = version
|
||||
);
|
||||
CREATE COLLATION coll_name FROM existing_collation;
|
||||
|
||||
@ -219,10 +228,19 @@ CREATE DATABASE name1
|
||||
OWNER = user_name
|
||||
TEMPLATE = template
|
||||
ENCODING = encoding
|
||||
STRATEGY = strategy
|
||||
LOCALE = locale
|
||||
LC_COLLATE = lc_collate
|
||||
LC_CTYPE = lc_ctype
|
||||
ICU_LOCALE = icu_locale
|
||||
ICU_RULES = icu_rules
|
||||
LOCALE_PROVIDER = locale_provider
|
||||
COLLATION_VERSION = collation_version
|
||||
TABLESPACE = tablespace_name
|
||||
CONNECTION LIMIT = connlimit;
|
||||
ALLOW_CONNECTIONS = allowconn
|
||||
CONNECTION LIMIT = connlimit
|
||||
IS_TEMPLATE = istemplate
|
||||
OID = oid;
|
||||
CREATE DATABASE name2;
|
||||
|
||||
-- CREATE DOMAIN
|
||||
@ -286,22 +304,39 @@ CREATE OR REPLACE FUNCTION
|
||||
WITH (isStrict, isCachable);
|
||||
|
||||
-- CREATE GROUP
|
||||
CREATE GROUP group_name WITH SUPERUSER;
|
||||
CREATE GROUP group_name WITH SUPERUSER NOSUPERUSER CREATEDB NOCREATEDB
|
||||
CREATEROLE NOCREATEROLE
|
||||
INHERIT NOINHERIT
|
||||
LOGIN NOLOGIN
|
||||
REPLICATION NOREPLICATION
|
||||
BYPASSRLS NOBYPASSRLS
|
||||
CONNECTION LIMIT 234
|
||||
ENCRYPTED PASSWORD 'password'
|
||||
VALID UNTIL '2023-09-23'
|
||||
IN ROLE role_name, role_name1
|
||||
IN GROUP role_name
|
||||
ROLE role_name
|
||||
ADMIN role_name
|
||||
USER role_name
|
||||
SYSID 757;
|
||||
CREATE GROUP group_name WITH ENCRYPTED PASSWORD 'password';
|
||||
CREATE GROUP group_name;
|
||||
|
||||
-- CREATE INDEX
|
||||
CREATE UNIQUE INDEX CONCURRENTLY index_name ON table_name USING btree
|
||||
((a > 4) COLLATE collation_name ASC NULLS LAST )
|
||||
INCLUDE (column_name1, clou_2)
|
||||
NULLS NOT DISTINCT
|
||||
WITH ( storage_parameter = 1)
|
||||
TABLESPACE tablespace_name
|
||||
WHERE (y > 4);
|
||||
CREATE INDEX ON table_name (col1);
|
||||
|
||||
-- CREATE LANGUAGE
|
||||
CREATE OR REPLACE PROCEDURAL LANGUAGE lan_name
|
||||
CREATE OR REPLACE TRUSTED PROCEDURAL LANGUAGE lan_name1
|
||||
HANDLER call_handler INLINE inline_handler VALIDATOR valfunction;
|
||||
CREATE LANGUAGE name;
|
||||
CREATE LANGUAGE name HANDLER call_handler;
|
||||
|
||||
-- CREATE MATERIALIZED VIEW
|
||||
CREATE MATERIALIZED VIEW table_name
|
||||
@ -341,6 +376,33 @@ FOR TYPE _int4 USING gist AS
|
||||
-- CREATE OPERATOR FAMILY
|
||||
CREATE OPERATOR FAMILY name USING index_method;
|
||||
|
||||
-- CREATE POLICY
|
||||
CREATE POLICY name ON table_name
|
||||
AS PERMISSIVE
|
||||
FOR INSERT
|
||||
TO PUBLIC
|
||||
USING ( using_expression )
|
||||
WITH CHECK ( check_expression );
|
||||
CREATE POLICY name ON table_name;
|
||||
|
||||
-- CREATE PROCEDURE
|
||||
CREATE OR REPLACE PROCEDURE
|
||||
name ( IN argname int DEFAULT default_expr)
|
||||
LANGUAGE lang_name
|
||||
TRANSFORM { FOR TYPE type_name }
|
||||
EXTERNAL SECURITY INVOKER
|
||||
EXTERNAL SECURITY DEFINER
|
||||
SET configuration_parameter FROM CURRENT
|
||||
AS 'definition'
|
||||
AS 'obj_file', 'link_symbol'
|
||||
sql_body;
|
||||
|
||||
-- CREATE PUBLICATION
|
||||
CREATE PUBLICATION name
|
||||
FOR ALL TABLES, FOR publication_object
|
||||
WITH ( publication_parameter = value);
|
||||
CREATE PUBLICATION name;
|
||||
|
||||
-- CREATE ROLE
|
||||
CREATE ROLE name WITH SUPERUSER CREATEDB CREATEROLE
|
||||
CREATEUSER
|
||||
@ -385,6 +447,63 @@ CREATE SERVER server_name TYPE 'server_type' VERSION 'server_version'
|
||||
OPTIONS ( option 'value', option 'value3');
|
||||
CREATE SERVER server_name FOREIGN DATA WRAPPER fdw_name;
|
||||
|
||||
-- CREATE STATISTICS
|
||||
CREATE STATISTICS IF NOT EXISTS statistics_name
|
||||
ON ( expression )
|
||||
FROM table_name;
|
||||
CREATE STATISTICS IF NOT EXISTS statistics_name
|
||||
( statistics_kind )
|
||||
ON column_name, ( expression )
|
||||
FROM table_name;
|
||||
CREATE STATISTICS ON column_name, column_name FROM table_name;
|
||||
|
||||
-- CREATE SUBSCRIPTION
|
||||
CREATE SUBSCRIPTION subscription_name
|
||||
CONNECTION 'conninfo'
|
||||
PUBLICATION publication_name, publication_name1
|
||||
WITH ( subscription_parameter = value, subscription_parameter = value);
|
||||
CREATE SUBSCRIPTION subscription_name
|
||||
CONNECTION 'conninfo'
|
||||
PUBLICATION publication_name;
|
||||
|
||||
-- CREATE TABLE
|
||||
CREATE UNLOGGED TABLE IF NOT EXISTS table_name (
|
||||
column_name int STORAGE PLAIN COMPRESSION compression_method COLLATE collation_name NOT NULL,
|
||||
CONSTRAINT constraint_name
|
||||
CHECK ( expression>3 ) NO INHERIT ,
|
||||
LIKE source_table
|
||||
)
|
||||
INHERITS ( parent_table, parent_table)
|
||||
PARTITION BY RANGE ( column_name COLLATE collation_name opclass)
|
||||
USING method
|
||||
WITH ( storage_parameter = value)
|
||||
ON COMMIT PRESERVE ROWS
|
||||
TABLESPACE tablespace_name;
|
||||
CREATE TABLE table_name (column_name int);
|
||||
CREATE GLOBAL TEMPORARY TABLE table_name
|
||||
OF int ( column_name WITH OPTIONS GENERATED ALWAYS AS ( generation_expr ) STORED
|
||||
)
|
||||
PARTITION BY HASH ( ( expression>3 ) COLLATE collation_name opclass)
|
||||
USING method
|
||||
WITH ( storage_parameter = value )
|
||||
ON COMMIT PRESERVE ROWS
|
||||
TABLESPACE tablespace_name;
|
||||
CREATE TABLE table_name OF type_name;
|
||||
CREATE TABLE table_name
|
||||
PARTITION OF parent_table (
|
||||
column_name WITH OPTIONS NOT NULL
|
||||
NULL
|
||||
CHECK ( expression ) NO INHERIT
|
||||
DEFAULT default_expr
|
||||
GENERATED ALWAYS AS ( generation_expr ) STORED
|
||||
GENERATED BY DEFAULT AS IDENTITY ( AS data_type )
|
||||
UNIQUE NULLS NOT DISTINCT INCLUDE ( column_name )
|
||||
PRIMARY KEY WITH ( storage_parameter = value )
|
||||
REFERENCES reftable ( refcolumn ) MATCH FULL
|
||||
ON DELETE NO ACTION ON UPDATE RESTRICT
|
||||
DEFERRABLE INITIALLY DEFERRED
|
||||
) FOR VALUES FROM (MINVALUE, x>3) TO (MAXVALUE,MAXVALUE);
|
||||
|
||||
-- CREATE TABLE AS
|
||||
CREATE GLOBAL TEMPORARY TABLE table_name
|
||||
(column_name, column_name2)
|
||||
@ -436,8 +555,14 @@ CREATE TEXT SEARCH TEMPLATE name (
|
||||
LEXIZE = lexize_function
|
||||
);
|
||||
|
||||
-- CREATE TRANSFORM
|
||||
CREATE OR REPLACE TRANSFORM FOR type_name LANGUAGE lang_name (
|
||||
FROM SQL WITH FUNCTION from_sql_function_name (argument_type),
|
||||
TO SQL WITH FUNCTION to_sql_function_name (argument_type )
|
||||
);
|
||||
|
||||
-- CREATE TRIGGER
|
||||
CREATE CONSTRAINT TRIGGER trig_name INSTEAD OF INSERT OR UPDATE
|
||||
CREATE OR REPLACE CONSTRAINT TRIGGER trig_name INSTEAD OF INSERT OR UPDATE
|
||||
ON table_name
|
||||
FROM referenced_table_name
|
||||
DEFERRABLE INITIALLY IMMEDIATE
|
||||
|
@ -9,3 +9,5 @@ DELETE FROM ONLY table_name * AS alias
|
||||
USING using_list
|
||||
WHERE y > 4
|
||||
RETURNING *;
|
||||
|
||||
DELETE FROM table_name;
|
||||
|
@ -3,8 +3,12 @@ DROP TABLE IF EXISTS table1, table2 RESTRICT;
|
||||
DROP TABLE products CASCADE;
|
||||
DROP TABLE products1;
|
||||
|
||||
-- DROP ACCESS METHOD
|
||||
DROP ACCESS METHOD IF EXISTS name CASCADE;
|
||||
DROP ACCESS METHOD name;
|
||||
|
||||
-- DROP AGGREGATE
|
||||
DROP AGGREGATE IF EXISTS aggname1(int, integer) CASCADE;
|
||||
DROP AGGREGATE IF EXISTS aggname1(int, integer), aggname2(IN argname integer) CASCADE;
|
||||
DROP AGGREGATE aggname2(int);
|
||||
|
||||
-- DROP CAST
|
||||
@ -20,7 +24,7 @@ DROP CONVERSION IF EXISTS conver_name RESTRICT;
|
||||
DROP CONVERSION conver_name1;
|
||||
|
||||
-- DROP DATABASE
|
||||
DROP DATABASE IF EXISTS db_name;
|
||||
DROP DATABASE IF EXISTS db_name WITH (FORCE);
|
||||
DROP DATABASE db_name;
|
||||
|
||||
-- DROP DOMAIN
|
||||
@ -77,13 +81,29 @@ DROP OPERATOR FAMILY IF EXISTS family_name USING index_method RESTRICT;
|
||||
DROP OPERATOR FAMILY family_name1 USING index_method;
|
||||
|
||||
-- DROP OWNED
|
||||
DROP OWNED BY owner_name1, owner_name2 CASCADE;
|
||||
DROP OWNED BY owner_name3;
|
||||
DROP OWNED BY owner_name1, CURRENT_ROLE CASCADE;
|
||||
DROP OWNED BY CURRENT_USER;
|
||||
|
||||
-- DROP POLICY
|
||||
DROP POLICY IF EXISTS name ON table_name RESTRICT;
|
||||
DROP POLICY name1 ON table_name1;
|
||||
|
||||
-- DROP PROCEDURE
|
||||
DROP PROCEDURE IF EXISTS name( IN argname int, OUT argname integer), name1( OUT argname int, OUT argname int) CASCADE;
|
||||
DROP PROCEDURE name1;
|
||||
|
||||
-- DROP PUBLICATION
|
||||
DROP PUBLICATION IF EXISTS name CASCADE;
|
||||
DROP PUBLICATION name;
|
||||
|
||||
-- DROP ROLE
|
||||
DROP ROLE IF EXISTS role_name1, role_name2;
|
||||
DROP ROLE role_name3;
|
||||
|
||||
-- DROP ROUTINE
|
||||
DROP ROUTINE IF EXISTS name (IN argname int, OUT argname integer),name1( OUT argname int, OUT argname int) RESTRICT;
|
||||
DROP ROUTINE name1;
|
||||
|
||||
-- DROP RULE
|
||||
DROP RULE IF EXISTS rule_name ON table_name CASCADE;
|
||||
DROP RULE rule_name1 ON table_name1;
|
||||
@ -100,6 +120,14 @@ DROP SEQUENCE con_name3;
|
||||
DROP SERVER IF EXISTS server_name RESTRICT;
|
||||
DROP SERVER server_name1;
|
||||
|
||||
-- DROP STATISTICS
|
||||
DROP STATISTICS IF EXISTS name, name1 CASCADE;
|
||||
DROP STATISTICS name1;
|
||||
|
||||
-- DROP SUBSCRIPTION
|
||||
DROP SUBSCRIPTION IF EXISTS name RESTRICT;
|
||||
DROP SUBSCRIPTION name1;
|
||||
|
||||
-- DROP TABLESPACE
|
||||
DROP TABLESPACE IF EXISTS tbspace_name1;
|
||||
DROP TABLESPACE tbspace_name2;
|
||||
@ -120,6 +148,10 @@ DROP TEXT SEARCH PARSER parser_name2;
|
||||
DROP TEXT SEARCH TEMPLATE IF EXISTS temp_name1 RESTRICT;
|
||||
DROP TEXT SEARCH TEMPLATE temp_name2;
|
||||
|
||||
-- DROP TRANSFORM
|
||||
DROP TRANSFORM IF EXISTS FOR type_name LANGUAGE lang_name RESTRICT;
|
||||
DROP TRANSFORM FOR type_name LANGUAGE lang_name;
|
||||
|
||||
-- DROP TRIGGER
|
||||
DROP TRIGGER IF EXISTS trigger_name1 ON table_name1 CASCADE;
|
||||
DROP TRIGGER trigger_name2 ON table_name2;
|
||||
@ -136,6 +168,7 @@ DROP USER user_name3;
|
||||
DROP USER MAPPING IF EXISTS FOR user_name SERVER server_name;
|
||||
DROP USER MAPPING IF EXISTS FOR USER SERVER server_name;
|
||||
DROP USER MAPPING IF EXISTS FOR CURRENT_USER SERVER server_name;
|
||||
DROP USER MAPPING IF EXISTS FOR CURRENT_ROLE SERVER server_name;
|
||||
DROP USER MAPPING IF EXISTS FOR PUBLIC SERVER server_name;
|
||||
DROP USER MAPPING FOR PUBLIC SERVER server_name;
|
||||
|
||||
|
@ -31,7 +31,7 @@ INSERT INTO reservation VALUES
|
||||
|
||||
-- INSERT
|
||||
WITH RECURSIVE a AS (SELECT * from bt )
|
||||
INSERT INTO table_name ( column_name, column_name2)
|
||||
INSERT INTO table_name.dt ( column_name, column_name2)
|
||||
VALUES (1, 2)
|
||||
RETURNING * ;
|
||||
INSERT INTO films DEFAULT VALUES;
|
@ -1,21 +1,32 @@
|
||||
-- ABORT
|
||||
ABORT WORK;
|
||||
ABORT TRANSACTION;
|
||||
ABORT AND NO CHAIN;
|
||||
|
||||
-- ANALYZE
|
||||
ANALYZE VERBOSE table_name ( column_name, column_name2);
|
||||
ANALYZE VERBOSE;
|
||||
ANALYZE SKIP_LOCKED true;
|
||||
ANALYZE BUFFER_USAGE_LIMIT 4;
|
||||
ANALYZE;
|
||||
|
||||
-- BEGIN
|
||||
BEGIN WORK ISOLATION LEVEL READ UNCOMMITTED
|
||||
READ WRITE
|
||||
NOT DEFERRABLE;
|
||||
|
||||
-- CALL
|
||||
CALL name (name => value);
|
||||
CALL name;
|
||||
|
||||
-- CHECKPOINT
|
||||
CHECKPOINT;
|
||||
|
||||
-- CLUSTER
|
||||
CLUSTER VERBOSE table_name USING index_name;
|
||||
CLUSTER (VERBOSE, VERBOSE TRUE) table_name USING index_name;
|
||||
CLUSTER VERBOSE;
|
||||
CLUSTER;
|
||||
|
||||
-- CLOSE
|
||||
CLOSE ALL;
|
||||
@ -23,10 +34,14 @@ CLOSE name_2;
|
||||
|
||||
-- COMMENT
|
||||
COMMENT ON
|
||||
ACCESS METHOD object_name IS 'text';
|
||||
COMMENT ON
|
||||
AGGREGATE agg_name (agg_type, agg_type2) IS 'text';
|
||||
COMMENT ON CAST (source_type AS target_type) IS 'text';
|
||||
COMMENT ON COLLATION object_name IS 'text';
|
||||
COMMENT ON COLUMN relation_name.column_name IS 'text'
|
||||
COMMENT ON COLUMN relation_name.column_name IS 'text';
|
||||
COMMENT ON CONSTRAINT constraint_name ON table_name IS 'text'
|
||||
COMMENT ON CONSTRAINT constraint_name ON DOMAIN domain_name IS 'text'
|
||||
COMMENT ON CONVERSION object_name IS 'text';
|
||||
COMMENT ON CONSTRAINT constraint_name ON table_name IS 'text';
|
||||
COMMENT ON DATABASE object_name IS 'text';
|
||||
@ -42,12 +57,18 @@ COMMENT ON MATERIALIZED VIEW object_name IS 'text';
|
||||
COMMENT ON OPERATOR -(int, NONE) IS 'text';
|
||||
COMMENT ON OPERATOR CLASS object_name USING index_method IS 'text';
|
||||
COMMENT ON OPERATOR FAMILY object_name USING index_method IS 'text';
|
||||
COMMENT ON POLICY policy_name ON table_name IS 'text';
|
||||
COMMENT ON PROCEDURAL LANGUAGE object_name IS 'text';
|
||||
COMMENT ON PROCEDURE procedure_name IS 'text';;
|
||||
COMMENT ON PUBLICATION object_name IS 'text';
|
||||
COMMENT ON ROLE object_name IS 'text';
|
||||
COMMENT ON ROUTINE routine_name IS 'text';
|
||||
COMMENT ON RULE rule_name ON table_name IS 'text';
|
||||
COMMENT ON SCHEMA object_name IS 'text';
|
||||
COMMENT ON SEQUENCE object_name IS 'text';
|
||||
COMMENT ON SERVER object_name IS 'text';
|
||||
COMMENT ON STATISTICS object_name IS 'text';
|
||||
COMMENT ON SUBSCRIPTION object_name IS 'text';
|
||||
COMMENT ON TABLE object_name IS 'text';
|
||||
COMMENT ON TABLESPACE object_name IS 'text';
|
||||
COMMENT ON TEXT SEARCH CONFIGURATION object_name IS 'text';
|
||||
@ -61,6 +82,7 @@ COMMENT ON VIEW object_name IS 'text';
|
||||
-- COMMIT
|
||||
COMMIT TRANSACTION;
|
||||
COMMIT WORK;
|
||||
COMMIT AND NO CHAIN;
|
||||
|
||||
-- COMMIT PREPARED
|
||||
COMMIT PREPARED 'foobar';
|
||||
@ -111,6 +133,7 @@ EXECUTE name ( parameter, parameter2);
|
||||
-- EXPLAIN
|
||||
EXPLAIN ( ANALYZE 'true',VERBOSE true, COSTS TRUE, FORMAT TEXT) SELECT * FROM no_nw;
|
||||
EXPLAIN ANALYZE VERBOSE SELECT * FROM no_nw;
|
||||
EXPLAIN SELECT * FROM no_nw;
|
||||
|
||||
-- FETCH
|
||||
FETCH NEXT FROM cursor_name;
|
||||
@ -135,6 +158,12 @@ GRANT CREATE, CONNECT, TEMPORARY, TEMP
|
||||
TO GROUP role_name, PUBLIC WITH GRANT OPTION;
|
||||
GRANT role_name TO role_name;
|
||||
|
||||
-- IMPORT FOREIGN SCHEMA
|
||||
IMPORT FOREIGN SCHEMA remote_schema
|
||||
LIMIT TO ( table_name)
|
||||
FROM SERVER server_name
|
||||
INTO local_schema
|
||||
OPTIONS ( option 'value');
|
||||
|
||||
-- LISTEN
|
||||
LISTEN channel;
|
||||
@ -143,13 +172,17 @@ LISTEN channel;
|
||||
LOAD 'filename';
|
||||
|
||||
-- LOCK
|
||||
-- lockmode:ACCESS SHARE | ROW SHARE | ROW EXCLUSIVE | SHARE UPDATE EXCLUSIVE
|
||||
-- | SHARE | SHARE ROW EXCLUSIVE | EXCLUSIVE | ACCESS EXCLUSIVE
|
||||
LOCK TABLE ONLY name * IN ACCESS SHARE MODE NOWAIT;
|
||||
|
||||
-- MOVE
|
||||
MOVE NEXT FROM cursor_name;
|
||||
|
||||
-- MERGE
|
||||
WITH query_name (id) AS (SELECT id FROM table_expression)
|
||||
MERGE INTO ONLY target_table_name * AS target_alias
|
||||
USING ONLY source_table_name * ON s.winename = w.winename
|
||||
WHEN MATCHED AND s.winename = w.winename THEN UPDATE SET column_name = DEFAULT;
|
||||
|
||||
-- NOTIFY
|
||||
NOTIFY virtual, 'This is the payload';
|
||||
|
||||
@ -166,7 +199,7 @@ REASSIGN OWNED BY old_role TO new_role;
|
||||
REFRESH MATERIALIZED VIEW name WITH NO DATA;
|
||||
|
||||
-- REINDEX
|
||||
REINDEX DATABASE name FORCE;
|
||||
REINDEX DATABASE CONCURRENTLY name FORCE;
|
||||
REINDEX TABLE name;
|
||||
REINDEX INDEX name;
|
||||
REINDEX SYSTEM name;
|
||||
@ -182,13 +215,13 @@ RESET ALL;
|
||||
REVOKE GRANT OPTION FOR
|
||||
REFERENCES, CREATE
|
||||
ON TABLE table_name
|
||||
FROM GROUP role_name, PUBLIC
|
||||
FROM GROUP role_name, PUBLIC, SESSION_USER
|
||||
RESTRICT;
|
||||
REVOKE ALL PRIVILEGES ON accounts FROM PUBLIC;
|
||||
REVOKE CREATE ON SCHEMA public_name FROM PUBLIC;
|
||||
REVOKE ALL PRIVILEGES ON accounts FROM CURRENT_USER;
|
||||
REVOKE CREATE ON SCHEMA public_name FROM CURRENT_ROLE;
|
||||
|
||||
-- ROLLBACK
|
||||
ROLLBACK TRANSACTION;
|
||||
ROLLBACK TRANSACTION AND NO CHAIN;
|
||||
ROLLBACK WORK;
|
||||
|
||||
-- ROLLBACK PREPARED
|
||||
@ -268,7 +301,7 @@ UNLISTEN *;
|
||||
UNLISTEN channel;
|
||||
|
||||
-- VACUUM
|
||||
VACUUM ( FULL, FREEZE, VERBOSE, ANALYZE) table_name (column_name, column_name2);
|
||||
VACUUM ( FULL, FREEZE, VERBOSE, ANALYZE, DISABLE_PAGE_SKIPPING, SKIP_LOCKED, INDEX_CLEANUP, PROCESS_MAIN, PROCESS_TOAST, TRUNCATE, PARALLEL 4,SKIP_DATABASE_STATS, ONLY_DATABASE_STATS, BUFFER_USAGE_LIMIT) table_name (column_name, column_name2);
|
||||
VACUUM FULL FREEZE VERBOSE table_name;
|
||||
VACUUM FULL FREEZE VERBOSE ANALYZE table_name (column_name,column_name2);
|
||||
VACUUM ANALYZE;
|
||||
@ -282,6 +315,3 @@ VALUES (1, '3'), (3, 'sdsd')
|
||||
FETCH NEXT 343 ROWS ONLY ;
|
||||
VALUES (1, '3'), (3, 'sdsd');
|
||||
|
||||
-- Caveats
|
||||
ANALYZE measurement;
|
||||
|
||||
|
@ -1,5 +1,17 @@
|
||||
-- SELECT
|
||||
WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression) SELECT ALL random() AS name1 FROM table_expression WHERE name1=name1 GROUP BY id HAVING sum(len) < interval '5 hours' WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) UNION ALL (SELECT * FROM others) ORDER BY salary DESC LIMIT ALL OFFSET start FETCH NEXT ROWS ONLY FOR UPDATE;
|
||||
WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression)
|
||||
SELECT ALL ON (col1,col2) random() AS name1 FROM table_expression
|
||||
WHERE name1=name1
|
||||
GROUP BY DISTINCT id
|
||||
HAVING sum(len) < interval '5 hours'
|
||||
WINDOW w AS (PARTITION BY depname ORDER BY salary DESC)
|
||||
UNION ALL (SELECT * FROM others)
|
||||
ORDER BY salary DESC
|
||||
LIMIT ALL
|
||||
OFFSET start ROWS
|
||||
FETCH NEXT ROWS ONLY
|
||||
FOR UPDATE OF table_name, table_name2 NOWAIT;
|
||||
SELECT;
|
||||
|
||||
WITH query_name (id) AS (SELECT id FROM table_expression) SELECT DISTINCT random() AS name1 FROM table_expression WHERE name1=name1 GROUP BY id HAVING sum(len) < interval '5 hours' WINDOW w AS (PARTITION BY depname ORDER BY salary DESC) INTERSECT DISTINCT (SELECT * FROM others) ORDER BY salary ASC LIMIT ALL OFFSET start FETCH NEXT ROW ONLY FOR NO KEY UPDATE;
|
||||
|
||||
@ -9,7 +21,7 @@ WITH query_name (id) AS (SELECT id FROM table_expression) SELECT DISTINCT ON (co
|
||||
|
||||
-- SELECT INTO
|
||||
WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression)
|
||||
SELECT DISTINCT ON (col2)
|
||||
SELECT DISTINCT ON (col2, col3)
|
||||
INTO TEMPORARY TABLE new_table
|
||||
FROM from_item
|
||||
WHERE name2=name1
|
||||
@ -22,6 +34,7 @@ INTO TEMPORARY TABLE new_table
|
||||
OFFSET start ROW
|
||||
FETCH FIRST 234 ROWS ONLY
|
||||
FOR UPDATE OF table_name NOWAIT;
|
||||
SELECT INTO new_table;
|
||||
|
||||
-- The Most Easy
|
||||
SELECT * ;
|
||||
|
@ -31,7 +31,7 @@ UPDATE sal_emp SET pay_by_quarter[1:2] = '{27000,27000}'
|
||||
-- UPDATE
|
||||
WITH RECURSIVE query_name (id) AS (SELECT id FROM table_expression)
|
||||
UPDATE ONLY table_name * AS alias
|
||||
SET column_name = DEFAULT, (column_name, column_nam2) = ( a+1,DEFAULT)
|
||||
SET column_name = DEFAULT, (column_name, column_nam2) = ROW ( a+1,DEFAULT)
|
||||
FROM from_list
|
||||
WHERE a=b
|
||||
RETURNING * AS output_name;
|
||||
|
Reference in New Issue
Block a user