在PostgreSQL中插入值到表的列中是最基本的数据库操作之一。这涉及使用SQL的INSERT语句将数据添加到数据库表中。
INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);
INSERT INTO table_name (column1, column2, ...)
VALUES
(value1, value2, ...),
(value3, value4, ...),
...;
INSERT INTO table_name (column1, column2, ...)
SELECT column1, column2, ...
FROM another_table
WHERE condition;
INSERT INTO table_name (column1, column2)
VALUES (DEFAULT, 'some value');
INSERT INTO table_name (column1, column2)
VALUES ('value1', 'value2')
RETURNING *;
PostgreSQL支持多种数据类型,插入时需要注意:
INSERT INTO users (name, age, is_active, created_at)
VALUES ('John Doe', 30, TRUE, '2023-01-15 14:30:00');
问题:尝试插入重复的主键值
解决方案:
-- 使用ON CONFLICT处理冲突
INSERT INTO table_name (id, column1)
VALUES (1, 'value')
ON CONFLICT (id) DO UPDATE SET column1 = EXCLUDED.column1;
问题:插入的数据违反表定义的约束
解决方案:检查约束条件,确保数据符合要求,或修改约束
问题:插入的值与列数据类型不兼容
解决方案:转换数据类型或提供正确类型的值
问题:尝试向非空列插入NULL值
解决方案:提供非空值或修改表结构允许NULL
-- 使用COPY命令进行高效批量插入
COPY table_name (column1, column2) FROM '/path/to/file.csv' DELIMITER ',' CSV;
INSERT INTO table_name (json_column)
VALUES ('{"key": "value", "array": [1, 2, 3]}'::jsonb);
INSERT INTO table_name (array_column)
VALUES (ARRAY[1, 2, 3]);
import psycopg2
conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
# 安全插入(参数化查询)
cur.execute(
"INSERT INTO users (name, email) VALUES (%s, %s)",
("John Doe", "john@example.com")
)
conn.commit()
cur.close()
conn.close()
没有搜到相关的文章