mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-06 15:24:56 +08:00
926bbab448
remove transactions use create or replace function make formatting consistent set search patch on first line Add documentation on modifying *.sql to set the search patch, and mention that major upgrades should still run the installation scripts. Some of these issues were spotted by Tom today.
78 lines
1.8 KiB
SQL
78 lines
1.8 KiB
SQL
-- Adjust this setting to control where the objects get created.
|
|
SET search_path = public;
|
|
|
|
--
|
|
-- This runs some common tests against the type
|
|
--
|
|
-- It's used just for development
|
|
--
|
|
-- XXX would be nice to turn this into a proper regression test
|
|
--
|
|
|
|
-- Check what is in pg_largeobject
|
|
SELECT count(DISTINCT loid) FROM pg_largeobject;
|
|
|
|
-- ignore any errors here - simply drop the table if it already exists
|
|
DROP TABLE a;
|
|
|
|
-- create the test table
|
|
CREATE TABLE a (fname name,image lo);
|
|
|
|
-- insert a null object
|
|
INSERT INTO a VALUES ('empty');
|
|
|
|
-- insert a large object based on a file
|
|
INSERT INTO a VALUES ('/etc/group', lo_import('/etc/group')::lo);
|
|
|
|
-- now select the table
|
|
SELECT * FROM a;
|
|
|
|
-- check that coercion to plain oid works
|
|
SELECT *,image::oid from a;
|
|
|
|
-- now test the trigger
|
|
CREATE TRIGGER t_a
|
|
BEFORE UPDATE OR DELETE ON a
|
|
FOR EACH ROW
|
|
EXECUTE PROCEDURE lo_manage(image);
|
|
|
|
-- insert
|
|
INSERT INTO a VALUES ('aa', lo_import('/etc/hosts'));
|
|
SELECT * FROM a
|
|
WHERE fname LIKE 'aa%';
|
|
|
|
-- update
|
|
UPDATE a SET image=lo_import('/etc/group')::lo
|
|
WHERE fname='aa';
|
|
SELECT * FROM a
|
|
WHERE fname LIKE 'aa%';
|
|
|
|
-- update the 'empty' row which should be null
|
|
UPDATE a SET image=lo_import('/etc/hosts')
|
|
WHERE fname='empty';
|
|
SELECT * FROM a
|
|
WHERE fname LIKE 'empty%';
|
|
UPDATE a SET image=null
|
|
WHERE fname='empty';
|
|
SELECT * FROM a
|
|
WHERE fname LIKE 'empty%';
|
|
|
|
-- delete the entry
|
|
DELETE FROM a
|
|
WHERE fname='aa';
|
|
SELECT * FROM a
|
|
WHERE fname LIKE 'aa%';
|
|
|
|
-- This deletes the table contents. Note, if you comment this out, and
|
|
-- expect the drop table to remove the objects, think again. The trigger
|
|
-- doesn't get fired by drop table.
|
|
DELETE FROM a;
|
|
|
|
-- finally drop the table
|
|
DROP TABLE a;
|
|
|
|
-- Check what is in pg_largeobject ... if different from original, trouble
|
|
SELECT count(DISTINCT loid) FROM pg_largeobject;
|
|
|
|
-- end of tests
|