mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-05 12:19:20 +02:00
recreated since the start of our transaction, our first reference to it errored out because we'd try to reuse our old relcache entry for it. Do this by accepting SI inval messages just before relcache search in heap_openr, so that dead relcache entries will be flushed before we search. Also, break heap_open/openr into two pairs of routines, relation_open(r) and heap_open(r). The relation_open routines make no tests on relkind and so can be used to open anything that has a pg_class entry. The heap_open routines are wrappers that add a relkind test to preserve their established behavior. Use the relation_open routines in several places that had various kluge solutions for opening rels that might be either heap or index rels. Also, remove the old 'heap stats' code that's been superseded by Jan's stats collector, and clean up some inconsistencies in error reporting between the different types of ALTER TABLE.
234 lines
6.5 KiB
Plaintext
234 lines
6.5 KiB
Plaintext
--
|
|
-- ERRORS
|
|
--
|
|
-- bad in postquel, but ok in postsql
|
|
select 1
|
|
--
|
|
-- UNSUPPORTED STUFF
|
|
|
|
-- doesn't work
|
|
-- attachas nonesuch
|
|
--
|
|
-- doesn't work
|
|
-- notify pg_class
|
|
--
|
|
--
|
|
-- RETRIEVE
|
|
|
|
-- missing relation name
|
|
select
|
|
-- no such relation
|
|
select * from nonesuch;
|
|
ERROR: parser: parse error at or near "select"
|
|
-- bad name in target list
|
|
select nonesuch from pg_database;
|
|
ERROR: Attribute 'nonesuch' not found
|
|
-- bad attribute name on lhs of operator
|
|
select * from pg_database where nonesuch = pg_database.datname;
|
|
ERROR: Attribute 'nonesuch' not found
|
|
-- bad attribute name on rhs of operator
|
|
select * from pg_database where pg_database.datname = nonesuch;
|
|
ERROR: Attribute 'nonesuch' not found
|
|
-- bad select distinct on syntax, distinct attribute missing
|
|
select distinct on (foobar) from pg_database;
|
|
ERROR: parser: parse error at or near "from"
|
|
-- bad select distinct on syntax, distinct attribute not in target list
|
|
select distinct on (foobar) * from pg_database;
|
|
ERROR: Attribute 'foobar' not found
|
|
--
|
|
-- DELETE
|
|
|
|
-- missing relation name (this had better not wildcard!)
|
|
delete from;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- no such relation
|
|
delete from nonesuch;
|
|
ERROR: Relation "nonesuch" does not exist
|
|
--
|
|
-- DESTROY
|
|
|
|
-- missing relation name (this had better not wildcard!)
|
|
drop table;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- no such relation
|
|
drop table nonesuch;
|
|
ERROR: table "nonesuch" does not exist
|
|
--
|
|
-- RENAME
|
|
|
|
-- relation renaming
|
|
-- missing relation name
|
|
alter table rename;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- no such relation
|
|
alter table nonesuch rename to newnonesuch;
|
|
ERROR: Relation "nonesuch" does not exist
|
|
-- no such relation
|
|
alter table nonesuch rename to stud_emp;
|
|
ERROR: Relation "nonesuch" does not exist
|
|
-- system relation
|
|
alter table stud_emp rename to pg_stud_emp;
|
|
ERROR: renamerel: Illegal class name: "pg_stud_emp" -- pg_ is reserved for system catalogs
|
|
-- conflict
|
|
alter table stud_emp rename to aggtest;
|
|
ERROR: renamerel: relation "aggtest" exists
|
|
-- self-conflict
|
|
alter table stud_emp rename to stud_emp;
|
|
ERROR: renamerel: relation "stud_emp" exists
|
|
-- attribute renaming
|
|
-- no such relation
|
|
alter table nonesuchrel rename column nonesuchatt to newnonesuchatt;
|
|
ERROR: Relation "nonesuchrel" does not exist
|
|
-- no such attribute
|
|
alter table emp rename column nonesuchatt to newnonesuchatt;
|
|
ERROR: renameatt: attribute "nonesuchatt" does not exist
|
|
-- conflict
|
|
alter table emp rename column salary to manager;
|
|
ERROR: renameatt: attribute "manager" exists
|
|
-- conflict
|
|
alter table emp rename column salary to oid;
|
|
ERROR: renameatt: attribute "oid" exists
|
|
--
|
|
-- TRANSACTION STUFF
|
|
|
|
-- not in a xact
|
|
abort;
|
|
NOTICE: ROLLBACK: no transaction in progress
|
|
-- not in a xact
|
|
end;
|
|
NOTICE: COMMIT: no transaction in progress
|
|
--
|
|
-- DEFINE AGGREGATE
|
|
-- sfunc/finalfunc type disagreement
|
|
create aggregate newavg2 (sfunc = int4pl,
|
|
basetype = int4,
|
|
stype = int4,
|
|
finalfunc = int2um,
|
|
initcond = '0');
|
|
ERROR: AggregateCreate: function 'int2um(int4)' does not exist
|
|
-- left out basetype
|
|
create aggregate newcnt1 (sfunc = int4inc,
|
|
stype = int4,
|
|
initcond = '0');
|
|
ERROR: Define: "basetype" unspecified
|
|
--
|
|
-- REMOVE INDEX
|
|
|
|
-- missing index name
|
|
drop index;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- bad index name
|
|
drop index 314159;
|
|
ERROR: parser: parse error at or near "314159"
|
|
-- no such index
|
|
drop index nonesuch;
|
|
ERROR: index "nonesuch" does not exist
|
|
--
|
|
-- REMOVE AGGREGATE
|
|
|
|
-- missing aggregate name
|
|
drop aggregate;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- missing aggregate type
|
|
drop aggregate newcnt1;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- bad aggregate name
|
|
drop aggregate 314159 (int);
|
|
ERROR: parser: parse error at or near "314159"
|
|
-- bad aggregate type
|
|
drop aggregate newcnt (nonesuch);
|
|
ERROR: RemoveAggregate: type 'nonesuch' does not exist
|
|
-- no such aggregate
|
|
drop aggregate nonesuch (int4);
|
|
ERROR: RemoveAggregate: aggregate 'nonesuch' for type integer does not exist
|
|
-- no such aggregate for type
|
|
drop aggregate newcnt (float4);
|
|
ERROR: RemoveAggregate: aggregate 'newcnt' for type real does not exist
|
|
--
|
|
-- REMOVE FUNCTION
|
|
|
|
-- missing function name
|
|
drop function ();
|
|
ERROR: parser: parse error at or near "("
|
|
-- bad function name
|
|
drop function 314159();
|
|
ERROR: parser: parse error at or near "314159"
|
|
-- no such function
|
|
drop function nonesuch();
|
|
ERROR: RemoveFunction: function 'nonesuch()' does not exist
|
|
--
|
|
-- REMOVE TYPE
|
|
|
|
-- missing type name
|
|
drop type;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- bad type name
|
|
drop type 314159;
|
|
ERROR: parser: parse error at or near "314159"
|
|
-- no such type
|
|
drop type nonesuch;
|
|
ERROR: RemoveType: type 'nonesuch' does not exist
|
|
--
|
|
-- DROP OPERATOR
|
|
|
|
-- missing everything
|
|
drop operator;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- bad operator name
|
|
drop operator equals;
|
|
ERROR: parser: parse error at or near "equals"
|
|
-- missing type list
|
|
drop operator ===;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- missing parentheses
|
|
drop operator int4, int4;
|
|
ERROR: parser: parse error at or near "int4"
|
|
-- missing operator name
|
|
drop operator (int4, int4);
|
|
ERROR: parser: parse error at or near "("
|
|
-- missing type list contents
|
|
drop operator === ();
|
|
ERROR: parser: parse error at or near ")"
|
|
-- no such operator
|
|
drop operator === (int4);
|
|
ERROR: parser: argument type missing (use NONE for unary operators)
|
|
-- no such operator by that name
|
|
drop operator === (int4, int4);
|
|
ERROR: RemoveOperator: binary operator '===' taking 'int4' and 'int4' does not exist
|
|
-- no such type1
|
|
drop operator = (nonesuch);
|
|
ERROR: parser: argument type missing (use NONE for unary operators)
|
|
-- no such type1
|
|
drop operator = ( , int4);
|
|
ERROR: parser: parse error at or near ","
|
|
-- no such type1
|
|
drop operator = (nonesuch, int4);
|
|
ERROR: RemoveOperator: type 'nonesuch' does not exist
|
|
-- no such type2
|
|
drop operator = (int4, nonesuch);
|
|
ERROR: RemoveOperator: type 'nonesuch' does not exist
|
|
-- no such type2
|
|
drop operator = (int4, );
|
|
ERROR: parser: parse error at or near ")"
|
|
--
|
|
-- DROP RULE
|
|
|
|
-- missing rule name
|
|
drop rule;
|
|
ERROR: parser: parse error at or near ";"
|
|
-- bad rule name
|
|
drop rule 314159;
|
|
ERROR: parser: parse error at or near "314159"
|
|
-- no such rule
|
|
drop rule nonesuch;
|
|
ERROR: Rule or view "nonesuch" not found
|
|
-- bad keyword
|
|
drop tuple rule nonesuch;
|
|
ERROR: parser: parse error at or near "tuple"
|
|
-- no such rule
|
|
drop instance rule nonesuch;
|
|
ERROR: parser: parse error at or near "instance"
|
|
-- no such rule
|
|
drop rewrite rule nonesuch;
|
|
ERROR: parser: parse error at or near "rewrite"
|