我有一个包含TEXT等数组的复合类型.我在我的主表中使用它来创建一个复合类型的数组.
如何生成INSERT命令(不使用复合类型的默认字段名称)?我可以使用复合数组创建TEMPORARY TABLE,然后将其插入主表吗?
如何生成INSERT命令(不使用复合类型的默认字段名称)?我可以使用复合数组创建TEMPORARY TABLE,然后将其插入主表吗?
例如:
DROP TABLE collection; DROP TABLE book_set; DROP TYPE book; CREATE TYPE book AS ( title TEXT,authors TEXT[],extra_spare TEXT ); CREATE TEMPORARY TABLE book_set ( books book[] ); CREATE TABLE shelf_collection ( shelf INT,position INT,books book[] ); -- Prefer to specify the fields I want,and NOT extra_spare as shown here! -- AND it doesn't yet work... needs more casting? INSERT INTO book_set( books ) VALUES ( ( 'book1',array[ ( 'author1','author2' ) ],'' ),( 'book2',array[ ( 'author3' ) ],'' ) ); -- And this obvIoUsly does not work yet! INSERT INTO shelf_collection( shelf,position,books ) VALUES ( 1,2,book_set );
ERROR: INSERT has more expressions than target columns.
有或没有array []构造失败.
我的实际使用情况要复杂得多,包含其他复合材料的复合材料以及许多领域.
出于性能原因,我没有在这里使用多个表(不需要连接来检索),并且内部组合和数组永远不会独立引用.
我使用的是perl(5.14.2)和DBI(1.616)以及psql(9.1.7).
更多信息:
以下工作,但如何更改它,以便我不需要指定书的所有字段:
DROP TABLE shelf_collection; DROP TYPE book; CREATE TYPE book AS ( title TEXT,extra_spare TEXT ); CREATE TABLE shelf_collection ( shelf INT,books book[] ); INSERT INTO shelf_collection VALUES ( 12,23,array[ROW( 'book title 1',array[ 'author1','author2' ],'' )::book] ); SELECT * FROM shelf_collection;
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。