postgresql postgres错误:列“id”不存在?

cu6pst1q  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(1)|浏览(449)

我在postgres中使用下面的StaticSentence创建了一个表,表reads是从另一个表products创建的,其中的数据被删除了,因为我只需要模式(我确实是个新手,但我相信有更好的方法来处理这个问题)。

public void syncProductsBefore() throws BasicException {
    new StaticSentence(s,"CREATE TABLE PRODUCTS_imports(ID) WITH OIDS  AS SELECT * FROM PRODUCTS ").exec();
    new StaticSentence(s, "DELETE FROM PRODUCTS_imports").exec();
}

然后我试着用下面的方法中的PreparedSentence写入这个表。2首先运行一个update命令来决定是插入新数据还是更新现有数据。
公共void同步产品(最终ProductInfoExt产品)引发基本异常{

Transaction t = new Transaction(s) {
        public Object transact() throws BasicException {
            /*Sync the Product in a transaction*/

            /* Try to update*/
            if (new PreparedSentence(
                    s,
                    "UPDATE PRODUCTS SET REFERENCE = ?, CODE = ?, NAME = ?, PRICEBUY = ?, PRICESELL = ?, CATEGORY = ?, TAXCAT = ?, IMAGE = ? WHERE ID = ?",
                    SerializerWriteParams.INSTANCE).exec(new DataParams() {
                public void writeValues() throws BasicException {
                    setString(1, prod.getReference());
                    setString(2, prod.getCode());
                    setString(3, prod.getName());
                    // setBoolean(x, p.isCom());
                    // setBoolean(x, p.isScale());
                    setDouble(4, prod.getPriceBuy());
                    setDouble(5, prod.getPriceSell());
                    setString(6, prod.getCategoryID());
                    setString(7, prod.getTaxCategoryID());
                    setBytes(8, ImageUtils.writeImage(prod.getImage()));
                    // setDouble(x, 0.0);
                    // setDouble(x, 0.0);
                    setString(9, prod.getID());
                }
            }) == 0) {

                /* leyonce */
                /**
                 * If not updated, try to insert insert into the import
                 * temporary table create temporary sorted copies of product
                 * catalog and products
                 */
                new PreparedSentence(
                        s,
                        "INSERT INTO PRODUCTS_imports(ID, REFERENCE, CODE, NAME, ISCOM, ISSCALE, PRICEBUY, PRICESELL, CATEGORY, TAXCAT, IMAGE, STOCKCOST, STOCKVOLUME) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
                        SerializerWriteParams.INSTANCE)
                        .exec(new DataParams() {                            
                            public void writeValues() throws BasicException{

                            /*leyonce --insert values into temporary import table*/ 
                                setString(1, prod.getID());
                                setString(2, prod.getReference());
                                setString(3, prod.getCode());
                                setString(4, prod.getName());
                                setBoolean(5, prod.isCom());
                                setBoolean(6, prod.isScale());
                                setDouble(7, prod.getPriceBuy());
                                setDouble(8, prod.getPriceSell());
                                setString(9, prod.getCategoryID());
                                setString(10, prod.getTaxCategoryID());
                                setBytes(11, ImageUtils.writeImage(prod
                                        .getImage()));
                                setDouble(12, 0.0);
                                setDouble(13, 0.0);

);}
现在更新运行得很完美,但是当编译器到达insert语句时,它会回滚并返回错误

org.postgresql.util.PSQLException: 
ERROR: column "id" does not exist
  Position: 84

我真的不明白为什么。

cedebl8k

cedebl8k1#

psql
\d PRODUCTS_imports
\d PRODUCTS

他们有ID栏吗?
如果原始表(products)缺少可以解释错误的ID列。

相关问题