MagicStack / MagicStack/asyncpg

Cockroachdb copy_records_to_table support?

Đang mở
#650 5 bình luận 0 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

Ngôn ngữ chính
Python
Star
8.1k
Fork
468
Chỉ số merge pull request
Không có pull request nào được merge trong 30 ngày

Mô tả

  • asyncpg version: v0.21.0
  • PostgreSQL version: CCL v20.1.8 @ 2020/10/21 15:46:38 (go1.13.9)
  • Python version: 3.8
  • Platform: macos
  • Do you use pgbouncer?: no
  • Did you install asyncpg with pip?: yes

EDIT:
Confirmed cockroachdb does not support the COPY ... FROM STDIN syntax. (https://github.com/cockroachdb/cockroach/issues/16392)

Reasoning is:
"because it's 1) complicated and 2) slow. All the data goes through a single connection. CockroachDB provides an IMPORT PGDUMP statement which is much faster and can operate in parallel."

Hopefully one of the maintainers can comment on this.


Hello, I'm not sure if this has been asked before, but I'm having issues running copy_records_to_table into a cockroachdb table/temp table. Here's a code snippet which will reproduce the issue when running a local cockroachdb.

Exception:

PostgresSyntaxError at or near "(": syntax error
DETAIL:  source SQL:
COPY "cool_table" FROM STDIN (FORMAT binary)
                             ^
import asyncio
import asyncpg


async def bwrite():
    dsn = "postgres://root@localhost:26257/postgres"
    conn: asyncpg.Connection = await asyncpg.connect(dsn)
    await conn.execute("SET experimental_enable_temp_tables = on")
    await conn.execute(
        """CREATE TEMP TABLE cool_table(
                objectid int8,
                CONSTRAINT "primary" PRIMARY KEY (objectid ASC)
            );"""
    )
    try:
        this_res = await conn.fetch("SHOW TABLES from pg_temp")
        print(this_res)
        await conn.copy_records_to_table(
            "cool_table", records=[(12345,), (67890,)]
        )
    except Exception as e:
        print(e)


if __name__ == "__main__":
    # build: CCL v20.1.8 @ 2020/10/21 15:46:38 (go1.13.9)
    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(bwrite())



Hướng dẫn đóng góp

Chưa lập chỉ mục được hướng dẫn đóng góp cho kho mã nguồn này

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu với asyncpg.Connection.copy_records_to_table và câu lệnh COPY "cool_table" FROM STDIN (FORMAT binary) được tạo ra và hiển thị trong issue. Sử dụng bản tái hiện được cung cấp với CockroachDB và một bảng tạm làm trường hợp chấp nhận; được xem là hoàn tất khi tính năng hỗ trợ được yêu cầu hoạt động hoặc khi tính không tương thích và phương án thay thế được hỗ trợ đã được xác lập rõ ràng.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
postgresql, python
Lĩnh vực
database
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.